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

你的问题是什么?这不是调试论坛。对不起,这是我第一次在这里问问题。现在呢?