Co się dzieje tutaj jest trochę mylące, ponieważ [1,2,3][True]
ma dwa zestawy []
s, które są interpretowane na różne sposoby.
To, co się dzieje, jest nieco bardziej jasne, jeśli podzielimy kod na kilka linii.
Pierwszy zestaw []
s tworzy obiekt listy. Załóżmy, że przypisywanie obiektów nazwą a
:
>>> [1,2,3]
[1, 2, 3]
>>> a = [1,2,3]
>>>
Drugi zestaw []
określić indeks wewnątrz tej listy. Zwykle chcesz zobaczyć kod tak:
>>> a[0]
1
>>> a[1]
2
>>>
Ale to jest tak samo ważne, aby użyć obiektu listy bezpośrednio, nigdy nie dając mu nazwę:
>>> [1,2,3][0]
1
>>> [1,2,3][1]
2
Wreszcie fakt, że True
i False
są użyteczne jako indeksy, ponieważ są traktowane jako liczby całkowite. Z data model docs:
Istnieją trzy typy liczb całkowitych:
Plain liczby całkowite ....
długie liczby całkowite .....
Boolean
Reprezentują one prawdą wartości Fałsz i Prawda. Dwa obiekty reprezentujące wartości False i True są jedynymi obiektami typu Boolean . Typ Boolean jest podtypem zwykłych liczb całkowitych, a wartości Boolean zachowują się odpowiednio jak wartości 0 i 1 w prawie wszystkich kontekstach , z wyjątkiem tego, że po przekonwertowaniu na ciąg znaków, ciągi "False" lub "True" mają wartość . są zwracane, odpowiednio.
Zatem [1,2,3][True]
odpowiada [1,2,3][1]
Doskonałe wyjaśnienie, dziękuję. – Pyderman