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中zip函数用法详解(全)

    python中zip函数用法详解(全)

    这篇文章主要给大家介绍了关于python中zip函数用法详解的相关资料,zip()是Python的一个内建函数,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Python代码打开本地.mp4格式文件的方法

    Python代码打开本地.mp4格式文件的方法

    今天小编就为大家分享一篇Python代码打开本地.mp4格式文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python使用fcntl模块实现程序加锁功能示例

    python使用fcntl模块实现程序加锁功能示例

    这篇文章主要介绍了python使用fcntl模块实现程序加锁功能,较为详细的分析了fcntl模块的具体功能并结合实例形式给出了Python实现程序加锁的操作技巧,需要的朋友可以参考下
    2017-06-06
  • python 定时器,实现每天凌晨3点执行的方法

    python 定时器,实现每天凌晨3点执行的方法

    今天小编就为大家分享一篇python 定时器,实现每天凌晨3点执行的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python可视化实战从矩阵乘法到图像仿射变换的线性代数之旅

    Python可视化实战从矩阵乘法到图像仿射变换的线性代数之旅

    这篇文章主要介绍了Python可视化实战从矩阵乘法到图像仿射变换,线性代数是理解空间变换和数据结构的核心数学工具,其意义往往隐藏在抽象的矩阵运算背后,随着计算机图形学和人工智能的发展,将线性代数概念转化为可视化形式成为揭示其本质的关键手段,需要的朋友可以参考下
    2026-02-02
  • Python3爬虫RedisDump的安装步骤

    Python3爬虫RedisDump的安装步骤

    在本篇文章里小编给大家整理的是一篇关于Python3爬虫RedisDump的安装步骤,有兴趣的朋友们可以学习参考下。
    2021-02-02
  • Python通过cv2读取多个USB摄像头

    Python通过cv2读取多个USB摄像头

    这篇文章主要为大家详细介绍了Python通过cv2读取多个USB摄像头,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Pytorch搭建YoloV5目标检测平台实现过程

    Pytorch搭建YoloV5目标检测平台实现过程

    这篇文章主要为大家介绍了Pytorch搭建YoloV5目标检测平台实现过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Python字符串拼接的4种方法实例

    Python字符串拼接的4种方法实例

    字符串是所有编程语言中都有的基本变量的类型 ,程序员基本每天都在和字符串打交道,下面这篇文章主要给大家介绍了关于Python字符串拼接的4种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Pytorch autograd与逻辑回归的实现详解

    Pytorch autograd与逻辑回归的实现详解

    这篇文章主要为大家介绍了Pytorch autograd与逻辑回归的实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07

最新评论