Indización negativa en Python

Tengo un registro en una lista

>>> bob =['bob smith',42,30000,'software'] 

Estoy tratando de obtener el apellido ‘Smith’ de este registro

Yo uso el siguiente comando:

 >>> bob[0].split()[1] 

Me proporciona ‘smith’

Pero el libro al que me refiero usa el siguiente comando:

 >>> bob[0].split()[-1] 

También me da el mismo resultado ‘Smith’.

¿Por qué los índices [1] y [-1] proporcionan el mismo resultado?

Las listas de Python se pueden “indexar de nuevo” utilizando índices negativos. -1 significa el último elemento, -2 significa el segundo para durar y así sucesivamente. Sucede que en su lista de longitud 2, el último elemento también es el elemento en el índice 1 .

Su libro sugiere usar -1 porque es más apropiado desde un punto de vista lógico. No desea que el elemento esté en el índice 1 per se, sino el último elemento de la lista, que es el apellido. ¿Qué pasa si, por ejemplo, también se incluyó un segundo nombre? Entonces, usar un índice de 1 no funcionaría, mientras que un índice de -1 haría.

Porque en este caso, la lista que estás dividiendo es ['adam', 'smith'] . Por lo tanto, bob[0].split()[1] devolverá el segundo elemento (no olvide que los índices de lista se basan en 0) y bob[0].split()[-1] devolverá ese último elemento.

Dado que el tamaño de la lista es 2, el segundo (índice 1 ) y el último (índice -1 ) son iguales.

En general, si tiene una lista my_list , entonces my_list[len(my_list) - 1] == my_list[-1]

esta es tu opinión

 In [73]: bob Out[73]: ['bob smith', 42, 30000, 'software'] 

esto es lo que te da bob [0]

 In [74]: bob[0] Out[74]: 'bob smith' 

Como puedes ver, bob [0] tiene solo dos elementos, así que 1 te da el segundo elemento y -1 el último elemento que es igual.

Los índices positivos cuentan desde el inicio de la lista, los índices negativos cuentan desde el final de la lista.

Es decir:

 bob[0].split()[0] == 'bob' bob[0].split()[1] == 'smith' bob[0].split()[-1] == 'smith' bob[0].split()[-2] == 'bob' 

Ahora digamos que tienes a alguien con un segundo nombre:

 jane =['jane elizabeth smith', 42, 30000, 'software'] 

jane[0].split()[1] daría el segundo nombre de Jane 'elizabeth' , mientras que jane[0].split()[-1] le daría a su apellido 'smith'

Ahora habiendo dicho todo esto;

  • No asum que un nombre se compone de dos componentes
  • no asum que un nombre tiene la forma
  • no asum que un primer nombre es una palabra
  • no asum que un apellido es una palabra
  • No asums nada !!!

Para obtener una lista más exhaustiva de las cosas en las que podría estar equivocado, consulte a los progtwigdores de Falsehoods que creen en los nombres