簡體   English   中英

根據項目的長度從列表中選擇項目

[英]select items from a list based on length of the item

我的物品清單很大(有時清單上可能有100萬個物品)。 現在,我想根據每個項目的長度來過濾此列表中的元素。 即我要添加小於7個字符或大於24個字符的項目。 我寫的代碼是:

returnNumbers //the list that holds million items
for num in returnNumbers:
    if((len(num)<7 or len(num)>24)):
        invalidLengthNumbers.append(num);

不確定是否有更好的方法可以做到這一點,因為遍歷一百萬個項目非常耗時。

您確實想采用迭代方法。

您的代碼可以替換為列表理解:

invalidLengthNumbers = [num for num in returnNumbers if len(num) < 7 or len(num) > 24]

或者,更短,並且僅通過利用比較鏈接來進行一個len()調用:

invalidLengthNumbers = [num for num in returnNumbers if not 7 <= 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

現在,您不再擁有一百萬個項目的列表。 您有一個生成器,可以根據需要生成一百萬個項目而無需將其全部保存在內存中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM