Indeksowanie na liście z wartościami logicznymi działa poprawnie. Chociaż indeks powinien być liczbą całkowitą.Python Bool i int porównania i indeksowanie na liście z wartościami logicznymi
obserwuję to, co starałem się w konsoli:
>>> l = [1,2,3,4,5,6]
>>>
>>> l[False]
1
>>> l[True]
2
>>> l[False + True]
2
>>> l[False + 2*True]
3
>>>
>>> l['0']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
>>> type(True)
<type 'bool'>
Kiedy próbowałem l['0']
to wydrukowane błąd, który typu int oczekiwać w indeksach i to jest oczywiste. Następnie, nawet typ 'True'
i 'False'
jest Bool
, indeksowanie na liście działa poprawnie i automatycznie konwertuje ją do typu int i wykonuje operację.
Proszę wyjaśnić, co dzieje się wewnętrznie. Po raz pierwszy zamieszczam pytanie, więc proszę mi wybaczyć za każdy błąd.
+1, Nauczyłem się czegoś. Nie znałem 'bool' był podklasą' int'. – nneonneo
Właśnie przejrzałem ten post zbyt {link} http://stackoverflow.com/questions/3174392/is-it-pythonic-to-use-bools-as-ints/3175293#3175293) Wielkie dzięki. – Somesh