it-swarm-pt.tech

Python - Como extrair os últimos x elementos de uma lista

Se o comprimento de uma lista python for maior que um determinado valor (digamos 10)), desejo extrair os 10 últimos elementos dessa lista para uma nova lista.Como posso fazer isso? Eu tentei obter a diferença entre len (my_list) - 10 e usá-lo como: new_list = [(len (my_list) - 10):] que não funciona

Alguma sugestão? desde já, obrigado

43
sura

é tão simples quanto:

my_list[-10:]
93
Felix Yan

Isso mostra como dividir uma lista longa em um tamanho máximo e colocar o restante em uma nova lista. Não é exatamente o que você está perguntando, mas pode ser o que você realmente deseja:

>>> 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]

É mais parecido com o que você está perguntando, basicamente o mesmo, mas usando a nova lista do 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]
>>> 
19
dkamins

O tutorial Python possui uma seção sobre como usar o fatiamento de lista: http://docs.python.org/tutorial/introduction.html#lists

No seu caso, é tão simples quanto escrever:

 new_list = my_list[-10:]
14
Raymond Hettinger

Na verdade, o índice na declaração da sua pergunta funciona perfeitamente - você pode colar exatamente qual erro ou resultado inesperado está vendo ao tentar usá-lo? Aqui está uma execução bem-sucedida do subscrito que você sugere:

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

O problema é simplesmente que você esqueceu de nomear my_list na frente da notação de fatia?

Edit: Como observa Felix, você deve impedir que o índice fique negativo:

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

E, é claro, como as outras respostas observam, um índice negativo constante é realmente a maneira mais fácil de atingir seu objetivo; mas eu queria primeiro focar no motivo pelo qual o seu "jeito próprio" de obter os últimos dez elementos - o que fazia sentido, mesmo que não tirasse o máximo proveito das convenções do Python sobre fatias - estava causando um erro.

4
Brandon Rhodes