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,