66 votes

Python - Comment extraire les x derniers éléments d'une liste ?

Si la longueur d'une liste python est supérieure à une valeur donnée (disons 10), alors je veux extraire les 10 derniers éléments de cette liste dans une nouvelle liste. Comment puis-je faire cela ? J'ai essayé de récupérer la différence entre len(my_list) - 10 et de l'utiliser comme : new_list = [(len(my_list) - 10) :] ce qui ne fonctionne pas.

Des suggestions ? Merci d'avance

0 votes

"qui ne fonctionne pas" n'est pas une description valable de l'échec.

128voto

Felix Yan Points 3943

C'est aussi simple que ça :

my_list[-10:]

Commentaire supplémentaire : (dans la section des commentaires)

Si la liste initiale comporte moins de 10 éléments, cette solution fonctionnera toujours. donnant la liste complète . Par exemple, si my_list = [1,2,3] entonces my_list[-10:] est égal à [1,2,3]

28 votes

Il est tout de même important de mentionner que si la liste initiale contient moins de 10 éléments, cette solution fonctionnera toujours et donnera la liste entière. Par exemple, si my_list = [1,2,3] entonces my_list[-10:] est égal à [1,2,3] .

22voto

dkamins Points 10565

Cela montre comment réduire une longue liste à une taille maximale et placer le reste dans une nouvelle liste. Ce n'est pas exactement ce que vous demandez, mais c'est peut-être ce que vous voulez vraiment :

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

C'est plus proche de ce que vous demandez, en gros la même chose, mais en prenant la nouvelle liste à la fin :

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

Il y avait déjà deux bonnes réponses, cela n'apporte pas grand-chose. Désolé pour le vote négatif.

12 votes

@Benjamin : En mettant de côté le fait que a) un exemple interactif réel peut être très utile et b) j'ai commencé à répondre à cette question avant de voir les autres réponses, vous n'avez absolument pas compris le but du downvoting sur Stack Overflow. Félicitations et bonne journée !

2 votes

@Benjamin : P.S. pour référence future : "Quand dois-je voter contre ? Utilisez vos downvotes chaque fois que vous rencontrez un message manifestement bâclé, sans effort, ou une réponse clairement et peut-être dangereusement incorrecte." ( stackoverflow.com/privilèges/vote-down )

15voto

Raymond Hettinger Points 231

Le tutoriel Python contient une section sur l'utilisation du découpage en listes : http://docs.python.org/tutorial/introduction.html#lists

Dans votre cas, c'est aussi simple que d'écrire :

 new_list = my_list[-10:]

6voto

Brandon Rhodes Points 21188

En fait, l'indice dans l'énoncé de votre question fonctionne parfaitement - pourriez-vous coller exactement l'erreur ou le résultat inattendu que vous voyez lorsque vous essayez de l'utiliser vous-même ? Voici une exécution réussie de l'indice que vous suggérez :

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

Le problème est-il simplement que vous avez oublié de nommer my_list devant la notation de votre tranche ?

Editar: Comme le note Felix, vous devez empêcher l'indice de devenir négatif :

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

Et, bien sûr, comme l'indiquent les autres réponses, un indice négatif constant est en fait le moyen le plus simple d'atteindre votre objectif ; mais je voulais d'abord me concentrer sur la raison pour laquelle votre "propre façon" d'obtenir les dix derniers éléments - qui était logique, même si elle ne tirait pas pleinement parti des conventions de Python concernant les tranches - vous donnait plutôt une erreur.

4 votes

Lorsque la longueur de sa liste est < 10.

0 votes

Ooooh, tu as raison. J'ai juste oublié ma_liste :(

0 votes

@FelixYan - vous avez raison, je vais corriger cela !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X