如何在 Python 中创建具有特定大小的列表
当程序员提前知道元素数量时,为列表或数组预分配存储空间是程序员经常用地方式。
与 C++
和 Java 不同,在 Python 中,你必须使用一些值初始化所有预分配的存储。通常情况下,开发人员使用假值用于此目的,如 None
、''
、False
和 0
。
Python 提供了几种创建固定大小列表的方法,每种方法都有不同的性能特征。
为了比较不同方法的性能,我们将使用 Python 的标准模块 timeit
。它提供了一种方便的方法来测量一小段 Python 代码的运行时间。
为列表预分配存储
第一个也是最快的方法,就是使用*
运算符,它将列表重复指定的次数。
>>> [None] * 10
[None, None, None, None, None, None, None, None, None, None]
一百万次迭代(timeit
的默认迭代值)大约需要 117 毫秒。
>>> timeit("[None] * 10")
0.11655918900214601
另一种方法是将 range
内置函数与列表推导式一起使用。
>>> [None for _ in range(10)]
[None, None, None, None, None, None, None, None, None, None]
它慢了将近六倍,每百万次迭代需要 612 毫秒的时间。
>>> timeit("[None for _ in range(10)]")
0.6115895550028654
第三种方法是 list.append()
与 for
循环一起使用。
>>> a = []
>>> for _ in range(10):
... a.append(None)
...
>>> a
[None, None, None, None, None, None, None, None, None, None]
使用循环是最慢的方法,需要 842 毫秒才能完成一百万次迭代。
>>> timeit("for _ in range(10): a.append(None)", setup="a=[]")
0.8420009529945673
为其他顺序数据结构预分配存储
由于你要为顺序数据结构预先分配存储空间,因此使用 array
内置数据结构而不是列表可能更有意义。
>>> from array import array
>>> array('i',(0,)*10)
array('i', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
如下所示,此方法仅次于 [None] * 10
。
>>> timeit("array('i',(0,)*10)", setup="from array import array")
0.4557597979946877
让我们将上述纯 Python 方法与 NumPy
用于科学计算的 Python 库进行比较。
>>> from numpy import empty
>>> empty(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
NumPy 方法每百万次迭代需要 589 毫秒。
>>> timeit("empty(10)", setup="from numpy import empty")
0.5890094790011062
但是,对于更大量的列表,NumPy 方法将更快。
>>> timeit("[None]*10000")
16.059584009999526
>>> timeit("empty(10000)", setup="from numpy import empty")
1.1065983309963485
结论是,对于小地列表来说,最好使用 [None] * 10
,但在处理更大量的顺序数据时切换到 NumPy 的 empty()
。
相关文章
在 Python 中的列表中删除多个元素
发布时间:2023/12/18 浏览次数:188 分类:Python
-
我们可以使用 if...else 控制语句、列表推导式、列表切片和 for 循环从 Python 中的列表中删除多个元素。要从 Python 列表中删除多个值,我们可以删除列表的实际值或要从列表中删除的值的索引。
如何在 Python 中获取一个列表的平均值
发布时间:2023/12/18 浏览次数:142 分类:Python
-
本教程将演示如何在 Python 中使用 statistics.mean 获得一个给定列表的平均值。本教程介绍了如何在 Python 中计算一个列表的平均数。
在 Python 中将字典转换为列表
发布时间:2023/12/18 浏览次数:54 分类:Python
-
本文介绍如何在 Python 中将字典转换为列表。Python 中的字典是由键-值对组合而成。在 key 的帮助下,你可以访问字典里面的值。
从 Python 列表中删除某元素的所有出现
发布时间:2023/12/18 浏览次数:163 分类:Python
-
在本文中,我们将看到如何在 Python 中从一个 List 中删除一个元素的所有出现。在 Python 中,列表允许同一个元素多次出现。即使一个元素的值可能与其他元素相同
在Python中将十六进制转换为字节
发布时间:2023/12/18 浏览次数:153 分类:Python
-
本教程介绍了如何在Python中将十六进制值转换为字节文字。十六进制,通常简写为hex,使用16个符号(0-9,a-f)表示值,与十进制的10个符号形成对比。例如,十进制中的1000在十六进制中是3E8。
Python 中字符串前面的 b
发布时间:2023/12/18 浏览次数:175 分类:Python
-
b 表示法用于在 Python 中指定字节字符串。在 Python 中使用 b" 语句 b" 表示法用于在 Python 中指定 bytes 字符串。
如何在 Python 中把整型转换为二进制
发布时间:2023/12/18 浏览次数:148 分类:Python
-
本教程将演示如何在 Python 中把整数转换成二进制。本教程介绍了如何在 Python 中把一个整数转换成二进制。本教程还列出了一些示例代码,以阐述在 Python 中从 int 到二进制的不同转换方式。
如何将整型 int 转换为字节 bytes
发布时间:2023/12/18 浏览次数:117 分类:Python
-
本贴士介绍了在 Python 2.7 及 Python 3 中如何将整型 int 转换为字节 bytes。将整型 int 转换为字节 bytes 是将字节 bytes 转换为整型 int 的逆操作,本文中介绍的大多数的 int 到 bytes 的方法都是 bytes 到
Python 中如何将字节 bytes 转换为整数 int
发布时间:2023/12/18 浏览次数:56 分类:Python
-
本贴士介绍了 Python2 以及 3 中如何将 bytes 或者 bytes 数组转换为整数Bytes 数据类型的数值范围为 0~255(0x00~0xFF)。