你真的想采用迭代方法。
您的代码可以替换为列表理解:
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
现在您不再拥有包含 100 万个项目的列表。您有一个生成器,可以根据需要生成 100 万个项目,而无需将其全部保存在内存中。