Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据项目的长度从列表中选择项目_Python_List_Filter - Fatal编程技术网

Python 根据项目的长度从列表中选择项目

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);

我有一个很大的项目列表(这个列表有时可能包含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//包含一百万项的列表
对于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()
一次。谢谢。