python list syntax slice

slice python string



Invertir una lista usando notaciĆ³n de segmento (5)

... ¿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á (un pasado, precisamente) de los índices válidos para L, por lo que excluyéndolo del rango como el valor de parada excluido:

>>> range(0, 6, 1) [0, 1, 2, 3, 4, 5]

Todavía le da índices para cada elemento de la lista.

en el siguiente ejemplo:

foo = [''red'', ''white'', ''blue'', 1, 2, 3]

donde: foo[0:6:1] imprimirá todos los elementos en foo. Sin embargo, foo[6:0:-1] omitirá el primer o el 0º elemento.

>>> foo[6:0:-1] [3, 2, 1, ''blue'', ''white'']

Entiendo que puedo usar foo.reverse () o foo [:: - 1] para imprimir la lista al revés, pero trato de entender por qué foo [6: 0: -1] no imprime la lista completa ?


Esta respuesta puede estar un poco desactualizada, pero podría ser útil para alguien que se haya quedado con el mismo problema. Puede obtener la lista inversa con un final arbitrario: hasta 0 índices, aplicando la segunda porción in situ como esta:

>>> L = list(range(10)) >>> L [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> (start_ex, end) = (7, 0) >>> L[end:start_ex][::-1] [6, 5, 4, 3, 2, 1, 0]


La notación de la rebanada en resumen:

[ <first element to include> : <first element to exclude> : <step> ]

Si desea incluir el primer elemento al invertir una lista, deje el elemento intermedio en blanco, como este:

foo[::-1]

También puede encontrar buena información acerca de los cortes de Python en general aquí:
Explique la notación de corte de Python.


Si tiene problemas para recordar la notación de corte, puede intentar hacer el Hokey Cokey :

[ In : Out : sacude todo sobre ]

[Primer elemento para incluir: Primer elemento que se debe omitir : El paso a utilizar]

YMMV


Utilizar

>>>foo[::-1]

Esto muestra el reverso de la lista desde el elemento final hasta el inicio,