233 votes

Comment supprimer le dernier élément d'une liste ?

J'ai ce programme qui calcule le temps pris pour répondre à une question spécifique, et sort de la boucle while lorsque la réponse est incorrecte, mais je veux supprimer le dernier calcul, de sorte que je puisse appeler min() et ce n'est pas le mauvais moment, désolé si c'est confus.

from time import time

q = input('What do you want to type? ')
a = ' '
record = []
while a != '':
    start = time()
    a = input('Type: ')
    end = time()
    v = end-start
    record.append(v)
    if a == q:
        print('Time taken to type name: {:.2f}'.format(v))
    else:
        break
for i in record:
    print('{:.2f} seconds.'.format(i))

363voto

Bastiano9 Points 475

Si j'ai bien compris la question, vous pouvez utiliser la notation de découpage pour conserver tout sauf le dernier élément :

record = record[:-1]

Mais un meilleur moyen est de supprimer l'élément directement :

del record[-1]

Note 1 : Notez que l'utilisation de record = record[:-1] ne supprime pas vraiment le dernier élément, mais assigne la sous-liste à record. Cela fait une différence si vous l'exécutez dans une fonction et que record est un paramètre. Avec record = record[:-1] la liste originale (en dehors de la fonction) est inchangée, avec del record[-1] ou record.pop() la liste est modifiée. (comme indiqué par @pltrdy dans les commentaires)

Note 2 : Le code pourrait utiliser quelques idiomes Python. Je recommande vivement de lire ceci :
Codez comme un pythoniste : Python idiomatique (via les archives de la machine à remonter le temps).

177voto

gnibbler Points 103484

Vous devez utiliser ce

del record[-1]

Le problème avec

record = record[:-1]

C'est qu'il fait une copie de la liste à chaque fois que vous supprimez un élément, ce qui n'est pas très efficace.

139voto

kroolik Points 5675

list.pop() supprime et renvoie le dernier élément de la liste.

11voto

paxdiablo Points 341644

Vous avez besoin :

record = record[:-1]

avant le for boucle.

Cela permettra de régler record à l'actuel record liste mais sans le dernier élément. Selon vos besoins, vous pouvez vous assurer que la liste n'est pas vide avant d'effectuer cette opération.

11voto

Greko2015 GuFn Points 99

Il suffit d'utiliser list.pop() maintenant si vous voulez l'inverse, utilisez : list.popleft()

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