2017-03-09 38 views

回答

2

the documentation of all

all(iterable)

返回True如果迭代的所有元素都是真(或者如果可迭代爲空)

而且documentation for any

any(iterable)

返回True如果迭代的任何元素是真實的。 如果迭代爲空,則返回False

空迭代[]是falsey,但不要緊作爲返回值是剛剛實施。


如果你想知道爲什麼出現這種情況,它只是一個執行的結果。如果你看的等同的代碼爲all從文檔:

def all(iterable): 
    for element in iterable: 
     if not element: 
      return False 
    return True 

因爲這種具體實施中,如果迭代是空的,for循環將完全因爲沒有元素被跳過。因此,它返回True。對於any,文檔提供了等效代碼:

def any(iterable): 
    for element in iterable: 
     if element: 
      return True 
    return False 

它一個空迭代返回False的原因是一樣的道理all返回True。由於列表中沒有元素,因此for循環會跳過並返回False

該實現確實有推理,因爲空設置邏輯使all返回true,請參閱this Math.SE postthis SO answerall可以被認爲是「有和元素一樣多的真實元素」。由於空集沒有真實元素和沒有元素,因此它返回true,因爲0等於0. any可以被認爲是「至少有一個...」,並且由於該集是空的,因此沒有至少一個甚至不是一個元素。因此all爲空集返回true,any爲空集返回false。

相關問題