需要一种更快速有效的方法将元素添加到python中的列表中

时间:2017-07-27 20:58:33

标签: algorithm python-2.7 python-3.x parsing

我正在尝试创建一个庞大的数字列表 a = '1 1 1 2 2 0 0 1 1 1 1 9 9 0 0'(超过一千万)。

我尝试过这些方法:

  1. %timeit l = list(map(int, a.split()))它是4.07 µs per loop
  2. %timeit l = a.split(' ')这是462 ns per loop
  3. %timeit l = [i for i in a.split()]花了1.19 µs per loop
  4. 据我所知,第2和第3个变体是字符列表,而第一个是整数列表,这很好。但随着元素数量超过一千万,创建一个列表最多可能需要6秒。这对我来说太长了。 有人能告诉我更快更有效的方法吗。

    由于

3 个答案:

答案 0 :(得分:4)

在纯Python中,不使用第三方扩展,<pre style="font-size:120%"> <?php echo file_get_contents('kpop.txt') ?> </pre> 应该是将输入拆分为列表的最快方法。 a.split()函数只有一个作业,它专门用于此用途。

答案 1 :(得分:3)

如果您知道您的输入包含由单个空格分隔的单个数字,那么您还可以考虑:

b = ord('0')
[ord(a)-b for a in A[::2]]

这会在我的计算机上在0.2秒内生成1000万个整数的列表。

答案 2 :(得分:2)

我在jupyter笔记本中测试了各种答案,彼得·德里瓦斯确实似乎比其他人提出的要好。

enter image description here

有趣的是,映射到整数似乎是瓶颈str.split()操作本身的速度要快一个数量级。

enter image description here