2017-05-28 1 views
0

J'essaie de résoudre un problème apparemment simple sur Python. J'essaie de mettre à jour le dernier élément d'une liste à d'autres entiers. Voici le code:La liste Python ne met pas à jour

list = [0,1,2,3,4] 
for i in xrange(len(list[2:])): 
    list[2:][i] = 44444 

print list 

Mais quand j'imprimer la liste, il reste toujours le même. J'observe les changements dans le débogueur et j'ai constaté que la liste ne se met pas à jour dans la boucle. J'ai essayé de chercher ailleurs sur Google et Stack Overflow, mais aucun d'eux ne fournit de réponses à ce problème simple. Laissez-moi savoir ce que vous en pensez. Merci.

Répondre

2

Une tranche d'une liste est une nouvelle liste; cela ne fait pas référence à l'original ou quelque chose comme ça. Affectez à à la place. (Vous pouvez éviter de faire une tranche supplémentaire pour obtenir la longueur de la même manière.)

list = [0, 1, 2, 3, 4] 
for i in xrange(len(list) - 2): 
    list[2 + i] = 44444 

print list 
0

Une tranche crée une nouvelle liste, à moins que vous lui assignez:

>>> values = [0, 1, 2, 3, 4] 
>>> values[-3:] = [4444] * 3 
>>> values 
[0, 1, 4444, 4444, 4444] 
0

En utilisant for i in xrange(len(list[2:])): vous Réduire la longueur de la liste de 5 à 3. Votre boucle ne itérerait que pour les 3 premiers éléments de la liste. Au lieu de cela, vous pouvez faire quelque chose comme ceci:

a=[0,1,2,3,4,5] 
for i in range(3,len(a)): 
    a[i]=444 
print(a)