我在python 3中尝试lambda函数。我尝试了这个链接中给出的示例(查找素数): http://www.secnetix.de/olli/Python/lambda_functions.hawk 这在python 3中不起作用。
我试图在过滤后分配相同的全局变量。无法使它工作。
变量primes在第一个循环后变为空数组。 有没有人有任何想法?
def test1():
num = 50
primes = range(2,num);
for i in range(2, 8):
print(list(primes));
primes = filter(lambda x: x % i, primes);
print(list(primes), i);
print("last");
print(list(primes));
test1();
答案 0 :(得分:1)
filter
returns an iterator。一旦迭代器耗尽,就像代码中的list
那样,你就无法重用它。
这在Python 2.x中起作用的原因是因为早期版本中filter
returned a list。
以下是Python 3中此行为的最小示例。
odds = filter(lambda x: x % 2, range(10))
res = list(odds)
print(res)
# [1, 3, 5, 7, 9]
res = list(odds)
print(res)
# []
为了解决这个问题,请将列表分配给primes
而不是迭代器:
primes = list(filter(lambda x: x % i, primes))