use*_*451 0 python list filter
我想用python脚本中的任何最快方法过滤两个列表.我已经filter()
为此目的使用了内置方法.但是它很慢并且花了太多时间因为我有很大的名单,我认为每个列表中的项目超过500万或者可能更多.我不知道怎么做.如果有人有想法或写小功能请.
gim*_*mel 14
也许你的名单太大而且不适合记忆,你会遇到颠簸.如果源位于文件中,则不需要同时在内存中存储整个列表.尝试使用itertools,例如:
from itertools import ifilter
def is_important(s):
return len(s)>10
filtered_list = ifilter(is_important, open('mylist.txt'))
Run Code Online (Sandbox Code Playgroud)
请注意,ifilter返回一个快速且内存有效的迭代器.
Generator Tricks是David M. Beazley的一个教程,教授生成器的一些有趣用途.
如果您可以避免首先创建列表,您会更快乐。
而不是
aBigList = someListMakingFunction()
filter( lambda x:x>10, aBigList )
Run Code Online (Sandbox Code Playgroud)
您可能想查看列出该列表的函数。
def someListMakingGenerator( ):
for x in some source:
yield x
Run Code Online (Sandbox Code Playgroud)
那么您的过滤器不会涉及大量内存
def myFilter( aGenerator ):
for x in aGenerator:
if x > 10:
yield x
Run Code Online (Sandbox Code Playgroud)
通过使用生成器,您不会在内存中保留太多内容。