Python 根据项目的长度从列表中选择项目
我有一个很大的项目列表(这个列表有时可能包含100万个项目)。现在,我想根据每个项目的长度筛选列表中的元素。i、 e.我想添加小于7个字符或大于24个字符的项目。我写的代码是:Python 根据项目的长度从列表中选择项目,python,list,filter,Python,List,Filter,我有一个很大的项目列表(这个列表有时可能包含100万个项目)。现在,我想根据每个项目的长度筛选列表中的元素。i、 e.我想添加小于7个字符或大于24个字符的项目。我写的代码是: returnNumbers //the list that holds million items for num in returnNumbers: if((len(num)<7 or len(num)>24)): invalidLengthNumbers.append(num);
returnNumbers //the list that holds million items
for num in returnNumbers:
if((len(num)<7 or len(num)>24)):
invalidLengthNumbers.append(num);
returnNumbers//包含一百万项的列表
对于ReturnNumber中的num:
如果((len(num)24)):
invalidLengthNumbers.append(num);
不确定是否有更好的方法,因为处理100万个项目需要花费时间。你真的想采用迭代方法 您的代码可以替换为列表:
invalidLengthNumbers = [num for num in returnNumbers if len(num) < 7 or len(num) > 24]
但这只会稍微快一点
如果以后需要循环使用invalidLengthNumbers
,请不要使用中间列表。直接循环并过滤returnnumber
。也许甚至连returnNumbers
本身都可以被一个生成器所取代,并且可以迭代地对该生成器进行过滤
def produceReturnNumbers():
for somevalue in someprocess:
yield some_other_value_based_on_somevalue
from itertools import ifilter
for invalid in ifilter(lambda n: not 7 <= len(n) <= 24, produceReturnNumbers()):
# do something with invalid
def produceReturnNumber():
对于someprocess中的somevalue:
基于某个值产生其他值
从itertools导入ifilter
对于无效的ifilter(lambda n:not 7),您真的希望采用迭代方法
您的代码可以替换为列表:
invalidLengthNumbers = [num for num in returnNumbers if len(num) < 7 or len(num) > 24]
但这只会稍微快一点
如果以后需要循环使用invalidLengthNumbers
,请不要使用中间列表。直接循环并过滤returnNumbers
。甚至returnNumbers
本身也可以被生成器替换,并且过滤生成器也可以迭代完成
def produceReturnNumbers():
for somevalue in someprocess:
yield some_other_value_based_on_somevalue
from itertools import ifilter
for invalid in ifilter(lambda n: not 7 <= len(n) <= 24, produceReturnNumbers()):
# do something with invalid
def produceReturnNumber():
对于someprocess中的somevalue:
基于某个值产生其他值
从itertools导入ifilter
对于无效的ifilter(lambda n:不是7+1。顺便说一下,如果len(num)<7或len(num)>24
的否定将是如果不是7@mata:的确;否定给了我们链接的机会,并且只调用len()
一次。谢谢。+1。顺便说一下,如果len(num)<7或len(num)>24
如果不是7则是@mata:的确;否定给了我们链接的机会,并且只调用len()
一次。谢谢。