python中的快速过滤方法

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的一个教程,教授生成器的一些有趣用途.


S.L*_*ott 5

如果您可以避免首先创建列表,您会更快乐。

而不是

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)

通过使用生成器,您不会在内存中保留太多内容。