【发布时间】:2011-08-09 20:15:01
【问题描述】:
我想找到一种最佳方法来处理非常大的有序整数列表,例如。
biglist = [45, 34, 2, 78, 7, 9, 10, 33, 78, 51, 99, 24, 88, ... N] where N > 1m
通过读取每个 biglist 元素来创建多个固定长度 S (~=200) 的小列表,对元素应用不同的操作,如果满足条件标准,则将元素或值添加到每个小列表中,直到达到 S例如。
x_smallist = []
y_smallist = []
z_smallist = []
count = 0
for i in biglist:
b = i / 5
a = b * 2
c = a^3 + b
if b > 7 and b < 69:
x_smallist.append(i)
y_smallist.append(a)
z_smallist.append(b)
count += 1
if count > S:
break
示例和功能仅用于说明。由于 biglist 很大,并且每个元素都被读取和操作,直到达到 S,并且该过程重复数千次,我想避免 for 循环。如何通过列表理解(或映射或过滤器)来实现这一点?
【问题讨论】:
-
如果你对每个元素做这么多的处理,a) 你将无法在列表推导中表达它,并且 b) 列表推导所节省的时间将相形见绌无论如何你必须做的真正工作。
-
这最好作为
for循环来完成。列表推导式和filter适用于不需要a、b和count等中间变量的情况。我唯一可能的让它更快的建议是有一个列表,你可以将元组附加到:smallist.append((i, a, b))。 -
对列表进行预过滤似乎很简单。
标签: python list filter list-comprehension