我指的是下面的Python代碼如何做所有()在空列表
all(a==2 for a in my_list)
我希望上面的代碼返回true,如果在my_list所有元素都是2 但是當我蟒蛇工作使my_list爲空並運行它爲
my_list = []
all(a==2 for a in my_list)
它也返回True。我很困惑這種行爲。它不應該返回False,因爲my_list中沒有值爲2的元素?
我指的是下面的Python代碼如何做所有()在空列表
all(a==2 for a in my_list)
我希望上面的代碼返回true,如果在my_list所有元素都是2 但是當我蟒蛇工作使my_list爲空並運行它爲
my_list = []
all(a==2 for a in my_list)
它也返回True。我很困惑這種行爲。它不應該返回False,因爲my_list中沒有值爲2的元素?
這是真的,因爲對列表中的每一個元素,所有的人都爲0,他們都等於2
你能想到的all被實現爲:
def all(list, condition):
for a in list:
if not condition(a):
return false
return true
鑑於any是:
def any(list, condition):
for a in list:
if condition(a):
return true
return false
也就是說,all
是無辜的,直到被證明有罪,any
有罪,直到證明無辜。
愛比喻!感謝那 :) – AetherUnbound
考慮的all
遞歸定義:
def all(L):
if L:
return L[0] and all(L[1:])
else:
???
如果L
每一個元素是真實的,那麼它必須是真實的,無論是在L
的第一個項目是真實的,和這all(L[1:])
是真實的。這是很容易看到一個列表與幾個項目,但如何一個項目清單。很明顯,如果唯一項目是真的,那麼每個項目都是真實的,但是在這種情況下,我們的遞歸公式是如何工作的?定義all([])
爲真使算法起作用。
另一種方式來看待它是任何名單L
針對all(L)
是不真的,我們應該能夠識別至少一個元素,a
,這是不正確的。但是,L
中沒有a
,因爲L
是空的,所以我們有理由說all([])
爲真。
相同的論點適用於any
。如果any(L)
爲真,我們應該能夠識別L
中的至少一個元素。但由於我們不能爲空的清單L
,我們可以說any([])
是錯誤的。遞歸執行any
背上這件事:
def any(L):
if L:
return L[0] or any(L[1:])
else:
return False
如果L[0]
是真的,我們可以永遠不進行遞歸調用返回true,那麼假設L[0]
是假的。我們遇到基本情況的唯一方法是,如果沒有L
的元素爲真,那麼 如果我們達到它,我們必須返回False
。
「所有」應用於空列表是「空洞地真」,如容易地確認:
>>> all([])
True
類似地,「如果0 = 1,則月亮方」是真實的。更一般地說,「所有P都是Q」 - 如果沒有P,那麼該陳述被認爲是真實的,因爲它可以正式捕獲爲「對於所有x,如果x是P,則x是Q」。最終,這些都是真實的,因爲條件邏輯運算符(if-then)在前件(第一個子句)爲False時評估爲True:「If False then True」評估爲True。回想一下,「如果A然後B」相當於「(不是A)或B」。
[在所有空白列表中顯示「all」和「any」結果的原因]的可能重複(http://stackoverflow.com/questions/3275058/reason-for-all-and-any-result-on-empty-列表) –