Tengo una lista como:

barcode = ["13350V1","13350V10","13350V2","13350V20"]

Quiero ordenar esta lista según los últimos tres dígitos, por lo que el resultado sería:

newbarcode = ["13350V1","13350V2","13350V10","13350V20"]

Ahora puedo hacer esto usando el siguiente script, pero no estoy exactamente seguro de qué significa esto (x: str(x)[-3]) y agradezco su ayuda en este sentido.

newbarcode = sorted(barcode, key=lambda x: str(x)[-3])
0
Parya 10 ene. 2022 a las 17:24
1
¿Está seguro de que desea ordenar los últimos 3 dígitos y no comenzar en V?
 – 
Thomas Weller
10 ene. 2022 a las 17:26
1
[-3] es un solo carácter. Probablemente quieras [-3:] (nota los dos puntos)
 – 
Thomas Weller
10 ene. 2022 a las 17:27
stackoverflow.com/questions/37914387/… podría ayudar, analiza el uso de clave y lambda en la clasificación de python.
 – 
joanis
10 ene. 2022 a las 17:29
Quiero ordenar la lista según los últimos tres dígitos para obtener un resultado de v1,v2,v10, v20, así que sí, tiene razón.
 – 
Parya
10 ene. 2022 a las 17:30
Esto resultará en ["13350V10","13350V1","13350V20","13350V2"]
 – 
Parya
10 ene. 2022 a las 17:31

1 respuesta

La mejor respuesta

Encuentre la posición de V en la cadena y luego ordene todos los dígitos después, pero rellénelos con 0 para tener una ordenación natural:

barcode = ['13350V1','13350V10','13350V2','13350V20']
newbarcode = sorted(barcode, key=lambda x: x[x.rindex('V')+1:].zfill(5))
print(newbarcode)

# Output
['13350V1', '13350V2', '13350V10', '13350V20']

Actualizar

¿Qué significa str(x)[-3]?

Supongamos que el número 1357900:

>>> n
1357900

# Convert number to string
>>> str(n)
'1357900'

# Now get the third character from the end (negative indexing)
>>> str(n)[-3]
'9'

# Slice the string from the third character from the end to end
>>> str(n)[-3:]
'900'
1
Corralien 10 ene. 2022 a las 18:46
Usar rindex es mejor.
 – 
pppig
10 ene. 2022 a las 17:37
@pppig. actualicé mi respuesta
 – 
Corralien
10 ene. 2022 a las 17:43
Gracias @Corralien, ¿qué significa str(x)[-3]?
 – 
Parya
10 ene. 2022 a las 18:25
@Parya. Actualicé mi respuesta con alguna explicación. ¿Puedes comprobarlo, por favor? Si mi respuesta se adapta a sus necesidades, considere aceptarla : )
 – 
Corralien
10 ene. 2022 a las 18:47