Python 尝试使用filter()查找列表中的所有素数
所以我尝试使用过滤器来查找列表中的所有素数,但是输出很奇怪。我在这件事上被困了一个多小时…仍然不知道我哪里做错了 代码如下:Python 尝试使用filter()查找列表中的所有素数,python,Python,所以我尝试使用过滤器来查找列表中的所有素数,但是输出很奇怪。我在这件事上被困了一个多小时…仍然不知道我哪里做错了 代码如下: TEST_LIST = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] RESULT_LIST = filter( lambda x: not [x % i == 0 for i in range(2, math.floor(x / 2))], TEST_LIST) print(TEST_LIST) print(list(RESULT_LIST))
TEST_LIST = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
RESULT_LIST = filter(
lambda x: not [x % i == 0 for i in range(2, math.floor(x / 2))], TEST_LIST)
print(TEST_LIST)
print(list(RESULT_LIST))
Output:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5]
首先,您可能想用代码修复一个bug。您希望范围包括x/2,因为否则您的算法会因x=4而中断。在避免使用数学模块的同时,一个简单的方法是使用截断除法,然后只添加一个:x//2+1 查看列表理解的结果:
In [6]: x = 36
In [7]: [x % i == 0 for i in range(2, x // 2 + 1))]
Out[7]:
[True,
True,
True,
False,
True,
False,
False,
True,
False,
False,
True,
False,
False,
False,
False,
False]
请注意,无论x的值是多少,列表都将始终为非空。非空列表是真实的,无论它们包含什么:
In [8]: bool([True])
Out[8]: True
In [9]: bool([False])
Out[9]: True
而是要检查列表中的任何值是否真实:
In [10]: any([x % i == 0 for i in range(2, x // 2 + 1)])
Out[10]: True
如果不使用列表理解,而是使用生成器表达式(不生成中间列表),则可以稍微加快速度:
In [11]: any(x % i == 0 for i in range(2, x // 2 + 1))
Out[11]: True
你的问题是什么?这不是调试论坛。对不起,这是我第一次在这里问问题。现在呢?