2017-03-08 2 views
2

i a écrit ce programme:python: IndexError: index d'affectation de liste hors de portée

l = [] 
N = int(input("enter the size of the list")) 
if N < 50: 
    for i in range(N): 
     a = int(input("add a number to the list")) 
     l.append(a) 
    for i in range(N): 
     del l[min(l)] 
     print(l) 

et quand je le lance disent-ils

Traceback (most recent call last): 
File "<pyshell#5>", line 2, in <module> 
del l[min(l)] 
IndexError: list assignment index out of range 

s'il vous plaît vous avez des solutions ??

+3

Que voulez-vous faire précisément à cette étape 'l del [min (l)]'? Considérons une liste '[10, 20, 30]' maintenant image l'exécution de 'del l [min (l)]'. Ce serait 'del l [10]', mais il n'y a pas de 10ème élément dans la liste et montre donc l'erreur – ZdaR

+1

Supposons que l soit [23, 42, 99]. Alors 'del l [min (l)]' est équivalent à 'del l [23]', ce qui équivaut à "supprimer le 24ème élément de l". Mais je n'ai pas 24 éléments, il y a trois éléments. – Kevin

Répondre

2

Votre problème est que del l[min(l)] tente de référencer l'élément de liste à l'index min(l). Supposons que votre liste a 3 articles dans ce:

l = [22,31,17] 

Essayer de supprimer l'élément à l'index min(l) fait référence à l'indice 17, qui n'existe pas. Seuls les indices 0, 1 et 2 existent.

Je pense que ce que vous voulez faire est de supprimer séquentiellement le plus petit élément de votre liste. Il y a un certain nombre de façons de le faire. La méthode qui est plus proche à ce que vous avez écrit serait:

for i in range(N): 
    l.remove(min(l)) 
    print(l) 
2

changement

del l[min(l)] 

à

del l[l.index(min(l))] 

Raison: Parce que vous souhaitez supprimer l'index de maintien d'éléments de élément min et pas index = min élément

O/P: (pour l'entrée 1 2 3 4 5)

[2, 3, 4, 5]

[3, 4, 5]

[4, 5]

[5]

[]