我喜欢Alex的答案,因为filter正是应用于列表的if语句,所以如果你想要根据条件探索列表的子集,这似乎是最自然的方法。
mylist = [1,2,3,4,5]
another_list = [2,3,4]
wanted = lambda x:x in another_list
for x in filter(wanted, mylist):
print(x)
这种方法适用于关注点分离,如果条件函数发生变化,唯一需要修改的代码就是函数本身。
mylist = [1,2,3,4,5]
wanted = lambda x:(x**0.5) > 10**0.3
for x in filter(wanted, mylist):
print(x)
生成器(generator)方法在你不需要列表成员时更加合适,而是需要对这些成员进行修改,这似乎更适合于生成器。
mylist = [1,2,3,4,5]
wanted = lambda x:(x**0.5) > 10**0.3
generator = (x**0.5 for x in mylist if wanted(x))
for x in generator:
print(x)
此外,过滤器也可以与生成器一起使用,尽管在这种情况下效率不高。
mylist = [1,2,3,4,5]
wanted = lambda x:(x**0.5) > 10**0.3
generator = (x**0.9 for x in mylist)
for x in filter(wanted, generator):
print(x)
当然,这样写还是很好的:
mylist = [1,2,3,4,5]
wanted = lambda x:(x**0.5) > 10**0.3
for x in mylist if wanted(x):
print(x)
for
循环和if
语句。 - Felix Klingx in a
会很慢。 - Nick Dandoulakis