我对Python有一点经验,但仍然不明白如何使用all()
和any()
。我正在努力解决问题;
2520是可以除以每个数字的最小数字 从1到10没有任何余数。
可被所有人整除的最小正数是多少 从1到20的数字?
我的算法首先是这样的;
tp = (1,2,3,4,5,6,7,8,9,10,
11,12,13,14,15,16,17,
18,19,20) #I used tuple so I thought process may faster than list
for x in range(100,100000,2):
for t in tp:
if x%t==0:
print(x)
然而,在我运行脚本之前,我意识到我的算法是错误的,因为数字可以被元组中数字的全部整除。然后我记得all()
函数,我试图改变我的代码,如;
if all(x%t==0):
print(x)
但是我遇到TypeError: 'bool' object is not iterable
错误。可能我之前从未使用过all()
和any()
,只是看了一些例子,我不明白。有人能清楚地解释一下吗?然后我可以解决这个问题。
答案 0 :(得分:2)
当all()
函数接受一个iterable作为其参数时,你可以在其中传递一个生成器,就像在python 3中一样,你可以使用返回生成器而不是元组的range(1,20)
:
>>> for x in range(100,100000,2):
... if all(x%t==0 for t in range(1,21)):
... print (x)
...
>>>
答案 1 :(得分:1)
all()
和any()
需要将可迭代参数传递给它们。
all()
才返回true。any()
返回true。对于您的具体问题,您可能最好使用filter
,因为它可以同时支持可迭代和函数。
答案 2 :(得分:0)
any()
和all()
采用列表,而不是等式。虽然概念来自数学,但这些函数在值列表上运行。也许你想要:
for x in range(100,10000,2):
if all([x%t==0 for t in tp]):
print(x)