... почему 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]
По-прежнему дает вам индексы для каждого элемента в списке.