... ¿por qué foo [6: 0: -1] no imprime la lista completa?
Porque el valor medio es el valor de parada exclusivo , en lugar de inclusivo. La notación de intervalo es [inicio, parada).
Así es exactamente como funciona el rango [x]:
>>> range(6, 0, -1)
[6, 5, 4, 3, 2, 1]
Esos son los índices que se incluyen en su lista resultante y no incluyen 0 para el primer elemento.
>>> range(6, -1, -1)
[6, 5, 4, 3, 2, 1, 0]
Otra forma de verlo es:
>>> 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
El índice 6 está más allá (una pasada, precisamente) de los índices válidos para L, por lo que se excluye del rango como valor de parada excluido:
>>> range(0, 6, 1)
[0, 1, 2, 3, 4, 5]
Aún le brinda índices para cada elemento de la lista.
foo[7:None:-1]
posibilidad :)