2015-12-09 13 views
6
>>all([]) 
True 
>>all([[]]) 
False 
>>all([[[]]]) 
True 
>>all([[[[]]]]) 
True 

Dokumentacja wszystkich() wskazuje, że zwraca True to wszystkie elementy są True/Dla pustej listy. Dlaczego wszystkie ([[]]) oceniają jako fałszywe? Ponieważ [] jest członkiem [[]], powinien również ocenić wartość True.Zachowanie się wszystkich() w pytonie

Odpowiedz

1
>>all([]) 
True 

ponieważ wszystkie iterables listy są prawdziwe (nie są zerowe iterables chociaż)

>>all([[]]) 
False 

Jest jeden pusty iterable (najgłębsza pusta lista), które ocenia się False

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

jedyna możliwa do sprawdzenia ([[]]) ma w sobie jedną pustą listę, a zatem ocenia na True

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

jak wyżej

10

docstring dla all jest następujący:

all(iterable) -> bool

zwraca True jeśli bool (x) jest prawdziwe dla wszystkich wartości X w iterable. Jeśli liczba iteracji jest pusta, zwróć wartość True.

To wyjaśnia zachowanie. [] to pusta iteracja, więc all zwraca True. Ale [[]] jest niezadawalający; jest to iteracja zawierająca jeden element, pustą listę. Wywołanie bool na tej pustej liście zwraca False; więc całe wyrażenie jest fałszywe.

Pozostałe przykłady zwracają True, ponieważ pojedynczy element nie jest już pusty, więc ma wartość boolean True.

1

wykazy w Pythonie ocenić na True wtedy i tylko wtedy, gdy nie są one puste (patrz, na przykład, this).

all zwraca True wtedy i tylko wtedy, gdy każdy z elementów jego argumentu jest oceniany jako True.

W pierwszym przykładzie Twoja lista jest pusta, a all zwraca True.

W drugim przykładzie jedynym elementem listy jest pusta lista, która ma wartość False, dlatego all zwraca False.

W przypadku wszystkich innych przykładów, jedyny element listy zawiera dalsze listy, dlatego też nie jest pusty i odpowiada True, więc all musi zwrócić True.