gpt4 book ai didi

python - 为什么循环内的列表过滤后变成空了

转载 作者:行者123 更新时间:2023-12-01 09:31:24 24 4
gpt4 key购买 nike

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

最佳答案

过滤器 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))

关于python - 为什么循环内的列表过滤后变成空了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49942157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com