python list sublist

Lista de Python/selección sublista-1 rareza



(6)

Así que he estado jugando con python y noté algo que parece un poco extraño. La semántica de -1 en la selección de una lista no parece ser consistente.

Así que tengo una lista de números.

ls = range(1000)

El último elemento de la lista es, por supuesto, ls[-1] pero si tomo una lista secundaria de eso para obtener todo, desde el punto medio hasta el final, haría

ls[500:-1]

pero esto no me da una lista que contenga el último elemento de la lista, sino una lista que contenga todo HASTA el último elemento. Sin embargo si lo hago

ls[0:10]

Obtengo una lista que contiene también el décimo elemento (por lo que el selector debería ser inclusivo), ¿por qué entonces no funciona para -1 ?

Por supuesto, puedo hacer ls[500:] o ls[500:len(ls)] (lo que sería una tontería). Me preguntaba cuál era el trato con -1, me doy cuenta de que no lo necesito allí.


-1 no es especial en el sentido de que la secuencia se lee al revés, sino que se envuelve alrededor de los extremos. De tal manera que menos uno significa cero menos uno, exclusivo (y, para un valor de paso positivo, la secuencia se lee "de izquierda a derecha".

así, para i = [1, 2, 3, 4] , i[2:-1] significa desde el elemento dos hasta el principio menos uno (o, ''hasta el final'') , que da como resultado [3] . El -1º elemento, o el elemento 0 al revés 1 es el último 4 , pero como es exclusivo, obtenemos 3.

Espero que esto sea algo comprensible.


En la list[first:last] , last no está incluido.

El décimo elemento es ls[9] , en ls[0:10] no hay ls[10] .


Me parece bastante consistente; Los índices positivos tampoco son inclusivos. Creo que lo estás haciendo mal. Recordando que range () tampoco es inclusivo, y que las matrices de Python tienen un índice de 0, aquí hay una sesión de muestra de python para ilustrar:

>>> d = range(10) >>> d [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> d[9] 9 >>> d[-1] 9 >>> d[0:9] [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> d[0:-1] [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> len(d) 10


Si desea obtener una lista secundaria que incluya el último elemento , deje en blanco después de dos puntos:

>>> ll=range(10) >>> ll [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> ll[5:] [5, 6, 7, 8, 9] >>> ll[:] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


Tengo un comportamiento consistente para ambos casos:

>>> ls[0:10] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> ls[10:-1] [10, 11, 12, 13, 14, 15, 16, 17, 18]

Tenga en cuenta, sin embargo, que el décimo elemento de la lista está en el índice 9 , ya que la lista tiene un índice de 0. Eso podría ser donde está su conexión.

En otras palabras, [0:10] no va del índice 0-10, efectivamente va del 0 al décimo elemento (lo que obtiene los índices 0-9, ya que el 10 no es inclusivo al final de la división) .


al cortar una matriz;

ls[y:x]

toma la parte del elemento y hasta y sin incluir x. cuando se usa la indexación negativa es equivalente a usar

ls[y:-1] == ls[y:len(ls)-1]

de modo que la división estaría hasta el último elemento, pero no lo incluiría (según la división)