过滤

时间:2018-04-20 12:55:11

标签: python python-3.x iterator python-2.x

我在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(); 

1 个答案:

答案 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))