sum=[1,2,3,4,5,6,7,8,9]
 for figure in sum:
    print(list(sum))
    print(figure)
    sum.remove(min(sum))
    print(figure)
    print(list(sum))
    print('\n')
 print(list(sum))
-3
zhangtianyu 19 mars 2019 à 14:15

2 réponses

Meilleure réponse

Vous ne pouvez pas modifier la longueur de l'itérable en itérant dessus. Si vous souhaitez imprimer l'élément minimum et le supprimer jusqu'à ce que la liste soit vide, vous devez boucler à condition que la liste soit vide, quelque chose comme ceci:

sum=[1,2,3,4,5,6,7]
while sum:
    print(min(sum))
    sum.remove(min(sum))

Production:

1
2
3
4
5
6
7

Le problème de la modification de la longueur itérable est que l'interpréteur de python essaiera essentiellement d'obtenir l'élément suivant en fonction de la position précédente dans la liste.

Par exemple, si vous parcourez:

[a,b,c,d]

Le premier élément sera a (l'élément sur index 0). La prochaine itération de la boucle for essaiera de récupérer l'élément sur index 1 mais si vous supprimez a, l'index 1 ne sera plus b, car votre courant la liste ressemblera à ceci;

[b,c,d]

Et le index 1 est maintenant c, en ignorant tous les autres éléments aux prochaines itérations

0
Rodolfo Donã Hosp 19 mars 2019 à 11:34

Si vous voulez effacer toute la liste, utilisez la fonction intégrée clear(). ci-dessous est l'exemple de la façon de procéder.

lis=[1,2,3,4,5,6,7,8,9]
print('printing original list',lis,sep=' : ')
# output printing original list : [1, 2, 3, 4, 5, 6, 7, 8, 9] 
lis.clear()
print('printing new cleared list',lis,sep=' : ')
# output printing new cleared list : []
0
sahasrara62 19 mars 2019 à 11:23