[英]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.