2011-12-19 26 views
24

Si la longitud de una lista python es mayor que un valor dado (digamos 10), entonces quiero extraer los últimos 10 elementos en esa lista en una nueva lista. ¿Cómo puedo hacer esto? Intenté obtener la diferencia entre len (my_list) - 10 y lo uso como: new_list = [(len (my_list) - 10):] que no funcionaPython - Cómo extraer los últimos x elementos de una lista

¿Alguna sugerencia? Gracias de antemano

+0

"que no funciona" no es una descripción de falla válida. – hop

+2

posible duplicado de [¿Cómo obtener los últimos elementos de una lista en Python?] (Http://stackoverflow.com/questions/646644/how-to-get-last-items-of-a-list-in-python) –

Respuesta

59

Es tan simple como:

my_list[-10:] 
+13

Aún es importante mencionar que si la lista inicial es de menos de 10 elementos, esta solución seguirá funcionando y generará toda la lista. P.ej. si 'my_list = [1,2,3]', entonces 'my_list [-10:]' es igual a '[1,2,3]'. – ovgolovin

12

Esto muestra cómo cortar una lista larga en un tamaño máximo y poner el resto en una nueva lista. No es exactamente lo que preguntas acerca, pero puede ser lo que realmente quiere:

>>> list1 = [10, 20, 30, 40, 50, 60, 70] 
>>> max_size = 5 
>>> list2 = list1[max_size:] 
>>> list2 
[60, 70] 
>>> list1 = list1[:max_size] 
>>> list1 
[10, 20, 30, 40, 50] 

Esto se parece más a lo que estás preguntando por, básicamente el mismo, pero teniendo la nueva lista desde el final:

>>> list1 = [10, 20, 30, 40, 50, 60, 70] 
>>> list2 = list1[:max_size] 
>>> list2 
[10, 20, 30, 40, 50] 
>>> list2 = list1[-max_size:] 
>>> list2 
[30, 40, 50, 60, 70] 
>>> list1 = list1[:-max_size] 
>>> list1 
[10, 20] 
>>> 
+0

Ya había dos buenas respuestas, esto no agrega mucho. Perdón por el voto negativo. – Benjamin

+8

@Benjamin: dejando a un lado los hechos que a) un ejemplo interactivo real puede ser muy útil yb) Empecé a responder esto antes de ver las otras respuestas, has fallado totalmente en entender el propósito de la votación negativa en Desbordamiento de pila. Felicitaciones y que tengas un gran día! – dkamins

+1

@Benjamin: P.S. para referencia futura: "¿Cuándo debo votar? Use sus votos atrasados ​​cada vez que encuentre una publicación extremadamente descuidada, sin esfuerzo, o una respuesta que sea clara y quizás peligrosamente incorrecta". (http: // stackoverflow.com/privileges/vote-down) – dkamins

5

en realidad, el subíndice en la declaración de su pregunta funciona perfectamente - se puede pegar exactamente de qué error o resultado inesperado que está viendo cuando intenta utilizar usted mismo? Aquí está una exitosa carrera del subíndice que ha sugerido:

>>> my_list = list('abcdefghijklmnop') 
>>> new_list = my_list[(len(my_list) - 10):] 
>>> new_list 
['g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'] 

es el problema, simplemente, que se olvidó de nombrar my_list en frente de su notación rebanada?

Editar: Como señala Félix, debe evitar que el índice de pendiente negativa:

my_list[max(0, len(my_list) - 10):] 

Y, por supuesto, como las otras respuestas en cuenta, un índice negativo constante es en realidad la forma más fácil de lograr Tu meta; pero primero quería centrarme en por qué su "propia manera" de obtener los últimos diez elementos, lo que tenía sentido, incluso si no aprovechaba al máximo las convenciones de Python con respecto a las divisiones, le estaba dando un error en su lugar.

+3

Cuando la longitud de su lista es <10. –

+0

ooooh, estás en lo correcto. Acabo de olvidar my_list :( – sura

+0

@FelixYan - ¡Tiene razón, lo arreglaré! –

Cuestiones relacionadas