Python中字典和列表的索引效率分析及实战结果

 更新时间:2026年03月10日 10:50:50   作者:YoungerChina  
Python中的索引是一种访问数据结构中特定元素的方法,它在各种数据类型中都有应用,包括字符串、列表、元组和字典,这篇文章主要介绍了Python中字典和列表的索引效率分析及实战结果的相关资料,需要的朋友可以参考下

1.序列

Python有多种内建的序列,所有序列都可以做某些特定的操作,大致上常用的是:加,乘,索引,分片以及检查某个元素是否属于序列的成员。 在这里我们重点讨论两种,字典与列表。并且只讨论其索引效率

2. 列表

列表是Python中最具灵活性的有序集合对象类型,其属性:

1. 任意对象的有序集合

2. 通过偏移读取

3. 可变长度、异构以及任意嵌套

4. 属于可变序列的分类

5. 对象引用数组

3. 字典

除了列表外,字典是Python中最具灵活性的内置数据结构类型,其属性:

1. 通过键而不是偏移量来读取

2. 任意对象的无序集合(键的hash值存在有序)

3. 可变长、异构以及任意嵌套

4. 属于可映射类型

5. 对象引用表(散列表)

在Python中,字典是通过哈希表实现的。也就是说,字典是一个数组,而数组的索引是键经过哈希函数处理后得到的。哈希函数的目的是使键均匀地分布在数组中。

4. 索引效率分析

通过上述可以简单地了解字典和列表的区别,列表是根据偏移量来读取的,字典是根据键的Hash来读取的。

通过实验来测试其索引效率:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
###############################################
# File Name   : test.py
# Author      : Younger Liu
# Mail        : lewiyon@126.com
# Created Time: Tue 19 Jun 2018 08:58:42 AM CST
# Description : 
###############################################
 
import time
import random
import string
 
MAX_COUNT = 1000000
 
def test_dict(data, key=None):
	b_time = int(time.time()*1000*1000)
	data.get(key)
	a_time = int(time.time()*1000*1000)
 
	print("Elapsed time %d us to query [%s]" % (a_time - b_time, key))
 
def test_array(data, key=None):
	b_time = int(time.time()*1000*1000)
	for ele in data:
		if ele == key:
			break
		continue
	a_time = int(time.time()*1000*1000)
	print("Elapsed time %d us to query [%s]" % (a_time - b_time, key))
 
def gen_arr():
	arr = []
	for i in range(MAX_COUNT):
		ele = ''.join(random.sample(string.ascii_letters + string.digits, 8))
		arr.append(ele)
		if i == 0:
			first = ele
		elif i == MAX_COUNT - 1:
			last = ele
	return arr, first, last
 
def gen_dict():
	dict = {}
	for i in range(MAX_COUNT):
		ele = ''.join(random.sample(string.ascii_letters + string.digits, 8))
		dict[ele] = ele
		if i == 0:
			first = ele
		elif i == MAX_COUNT -1:
			last = ele
	return dict, first, last
 
if __name__ == '__main__':
	arr, first_ele, last_ele = gen_arr()
	print("-----Query first ele in array-------")
	test_array(arr, first_ele)
	print("-----Query last ele in array-------")
	test_array(arr, last_ele)
	print("-----Query ele not in array-------")
	test_array(arr, '111111')
	dict, first_key, last_key = gen_dict()
	print("-----Query first generated ele in dict-------")
	test_dict(dict, first_key)
	print("-----Query last generated ele in dict-------")
	test_dict(dict, last_key)
	print("-----Query ele not in dict-------")
	test_dict(dict, '111111')

运行结果如下:

-----Query first ele in array-------
Elapsed time 10 us to query [dRP3aEZQ]
-----Query last ele in array-------
Elapsed time 37236 us to query [6agsBq37]
-----Query ele not in array-------
Elapsed time 38666 us to query [111111]
-----Query first generated ele in dict-------
Elapsed time 12 us to query [DkYN2xJL]
-----Query last generated ele in dict-------
Elapsed time 3 us to query [BrNCeWP2]
-----Query ele not in dict-------
Elapsed time 2 us to query [111111]

多次运行,其结果相差不多

由此可见,字典的索引效率要远远大于列表

总结

到此这篇关于Python中字典和列表的索引效率分析及实战结果的文章就介绍到这了,更多相关Python字典和列表索引效率内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现地图可视化folium完整过程

    Python实现地图可视化folium完整过程

    Folium是一个基于leaflet.js的Python地图库,其中,Leaflet是一个非常轻的前端地图可视化库,本文重点给大家介绍Python实现地图可视化folium完整过程,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • 详解python中index()、find()方法

    详解python中index()、find()方法

    本文通过实例代码给大家介绍了python中index()、find()方法,文中给大家提到了Python将DataFrame的某一列作为index的方法,需要的朋友可以参考下
    2019-08-08
  • OpenCV图像处理之自定义滤波

    OpenCV图像处理之自定义滤波

    滤波处理分为两大类:线性滤波和非线性滤波,OpenCV里有这些滤波的函数,使用起来非常方便,这篇文章主要给大家介绍了关于OpenCV图像处理之自定义滤波的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • Python判断两个文件是否相同与两个文本进行相同项筛选的方法

    Python判断两个文件是否相同与两个文本进行相同项筛选的方法

    今天小编就为大家分享一篇关于Python判断两个文件是否相同与两个文本进行相同项筛选的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Flask web开发处理POST请求实现(登录案例)

    Flask web开发处理POST请求实现(登录案例)

    这篇文章主要介绍了Flask web开发处理POST请求实现(登录案例),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Python如何在单元测试中给对象打补丁

    Python如何在单元测试中给对象打补丁

    这篇文章主要介绍了Python如何在单元测试中给对象打补丁,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • Python中数字以及算数运算符的相关使用

    Python中数字以及算数运算符的相关使用

    这篇文章主要介绍了Python中数字以及算数运算符的相关使用,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • 使用python装饰器验证配置文件示例

    使用python装饰器验证配置文件示例

    项目中用到了一个WriteData的函数保存用户填写的配置,为了实现验证用户输入的需求,在不影响接口的使用的前提下,采用了python的装饰器实现,代码片段演示了如何验证WriteData函数的输入参数
    2014-02-02
  • Python探索之爬取电商售卖信息代码示例

    Python探索之爬取电商售卖信息代码示例

    这篇文章首先简单介绍了网络爬虫的基本概念,然后向大家分享了一段有关爬取电商售卖信息的实例代码,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • OpenCV 边缘检测

    OpenCV 边缘检测

    OpenCV提供了许多边缘检测滤波函数,这些滤波函数都会将非边缘区域转为黑色,将边缘区域转为白色或其他饱和的颜色。这篇文章主要介绍了OpenCV 边缘检测,需要的朋友可以参考下
    2019-07-07

最新评论