... чому foo [6: 0: -1] не друкує весь список?
Оскільки середнє значення - це ексклюзивне , а не інклюзивне, стоп-значення. Інтервал позначення є [старт, стоп).
Саме так працює діапазон [x]:
>>> range(6, 0, -1)
[6, 5, 4, 3, 2, 1]
Це показники, які включаються у ваш підсумковий список, і вони не включають 0 для першого елемента.
>>> range(6, -1, -1)
[6, 5, 4, 3, 2, 1, 0]
Інший спосіб подивитися на це:
>>> L = ['red', 'white', 'blue', 1, 2, 3]
>>> L[0:6:1]
['red', 'white', 'blue', 1, 2, 3]
>>> len(L)
6
>>> L[5]
3
>>> L[6]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Індекс 6 виходить за рамки (точно минулих, точно) дійсних індексів для L, тому виключаючи його з діапазону як виключене значення зупинки:
>>> range(0, 6, 1)
[0, 1, 2, 3, 4, 5]
Все ще дає вам індекси для кожного елемента у списку.
foo[7:None:-1]
можливість :)