python中all()的“奇怪”現象

先看一下下面幾條語句結果,可能會覺得不是那麼符合直覺。

>> all([])
True
>> all([[]])
False
>> all([[[]]])
True

一開始在項目中發現all([])返回True,感覺很不理解。

其實all()的原理差不多是這樣的:

def all(iterable):
    for x in iterable:
        if bool(x) is False:  # 只要有一個不滿足,就返回False
            return False
    return True

① 對於all([]), 列表沒有元素,也就沒有不滿足的,於是就返回True了
② 對於all([[]]), 列表有1個元素,這個元素是[],bool([])是False,所以這個元素不滿足,等價於 all([False]),所以整個斷言就失敗了,返回False
③ 對於all([[[]]]),列表有1個元素,這個元素是[[]], 即有一個空列表的列表,bool([[]])是True,所以這個元素滿足,等價於all([True]),所以整個斷言成功,返回True

對於②和③來說,它們都是有1個元素,區別在於元素[]和[[]],一個是沒有東西, 一個是有一個東西,雖然這東西是空列表。bool(沒有東西)是False, bool(有東西)是True。

發佈了136 篇原創文章 · 獲贊 1265 · 訪問量 117萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章