如果我有一个包含1000万个对象的列表,我如何快速过滤该列表。通过列表理解的完整迭代大约需要4-5秒。在python中有没有有效的数据结构或库来解决这个问题呢?或者,python不适合大数据集?
发布于 2011-01-26 10:17:20
Itertools是为高效循环而设计的。特别是,您可能会发现ifilter
适合您的目的。迭代大型数据结构的开销总是很大的,但是如果一次只需要一些数据,那么惰性评估会有很大帮助。
您还可以尝试使用生成器表达式,它通常与它们的列表理解对应物相同(尽管用法可能不同)或生成器,它也具有惰性计算的好处。
发布于 2011-01-26 10:21:18
如果您有统一类型的数字&如果速度是您的主要目标(并且您希望使用python),那么可以使用Numpy数组。
发布于 2011-01-26 10:37:53
即使在一个非常原始的整数数组上使用内置函数,在我的计算机上也需要几秒钟的时间来计算。
>>> l=[1]*10000000
>>> s=filter(lambda x:True,l)
我建议您使用不同的方法,比如对generators使用Numpy或惰性评估和/或使用迭代模块itertools
https://stackoverflow.com/questions/4800858
复制相似问题