[英]TypeError: int object is not iterable when trying to use a list of prime numbers
[英]Trying to use filter() to find all prime numbers in a list
所以我試圖使用filter()查找列表中的所有素數,但是輸出很奇怪。 我被困了一個多小時...仍然無法弄清楚我做錯了什么
這是代碼:
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]
首先,您可能要修復代碼中的錯誤。 您希望范圍包括x / 2
,因為否則您的算法會因為x = 4
中斷。 避免使用math
模塊的一種簡單方法是使用截斷除法並僅添加一個: 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.