理解Python中的any() - all()

时间:2015-01-29 20:09:54

标签: python python-3.4

我对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(),只是看了一些例子,我不明白。有人能清楚地解释一下吗?然后我可以解决这个问题。

3 个答案:

答案 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()需要将可迭代参数传递给它们。

    当且仅当iterable中的所有值都是 truthy 时,
  • all()才返回true。
  • 如果iterable中的任何一个值为 truthy ,则
  • 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)