2017-09-08 3 views
0

Disons que j'ai une liste:Réécrire l'élément dans une liste basée sur l'index d'entrée

lst = [1,2,3,4] 

et j'invite l'utilisateur à saisir un index et un élément. Le programme recherchera ensuite l'emplacement de l'index dans la liste et remplacera l'élément de la liste par l'élément d'entrée utilisateur. Par exemple:

enter index: 2 
enter item to replace: 5 

la sortie sera:

[1,2,5,4] 

Voici ce que j'ai essayé:

lst = [1,2,3,4] 

index = int(input("Enter index: ")) 
item = int(input("Enter item to replace: ")) 

i = 0 
n = len(lst) 
while i<n: 
    if i == index: 
     lst[i] = item 
    else: 
     i+=1 
print(lst) 

Je ne sais pas pourquoi il n'imprime pas quoi que ce soit et Je suis assez sûr que la logique est comme écrite, mais je suppose que mon problème est dans la boucle while?

+3

Pourquoi utiliser une boucle? Quand vous pouvez faire 'lst [index] = item' –

+0

Votre boucle while est piégée parce que vous n'incrémentez jamais i quand l'index i == .. donc une fois qu'il atteint et remplace l'index, il est piégé dans la boucle while – AK47

+0

Si vous je veux juste remplacer les valeurs la solution de @Moses est correcte. Mais rappelez-vous si vous voulez ajouter une nouvelle valeur à l'index 4 (insérer le 5ème élément à la fin de la liste) cela échoue. Ensuite, vous avez besoin de la méthode append. – Igle

Répondre

1

Votre boucle while se termine jamais parce qu'il n'y a jamais incrément fait pour la valeur de i quand i == index - donc votre boucle while est piégé dans une boucle infinie et il atteint jamais la fin du programme d'imprimer la liste

lst = [1,2,3,4] 

index = int(input("Enter index: ")) 
item = int(input("Enter item to replace: ")) 

i = 0 
n = len(lst) 
while i<n: 
    if i == index: 
     lst[i] = item 
    i+=1 
print(lst) 
2

Comme indiqué par @MosesKoledoye vous pouvez simplement utiliser simplement indexing:

lst = [1,2,3,4] 

index = int(input("Enter index: ")) 
item = int(input("Enter item to replace: ")) 

lst[index] = item 

Enter index: 2 

Enter item to replace: 5 

print(lst) 
[1, 2, 5, 4] 

Rappelez-vous que les listes sont 0-indexés. Si vous souhaitez utiliser une liste 1-indexée, utilisez simplement lst[index + 1] = item.

+0

'lst [index] = 3' pour' index' un nombre n'est pas une tranche, c'est une affectation simple. Trancher implique l'indexation de plusieurs éléments en même temps – GPhilo

+0

@GPhilo merci, corrigé. Bien que techniquement, [slice (stop) '] (https://docs.python.org/3/library/functions.html#slice) n'est-il pas une tranche valide? Ce point m'a toujours un peu dérouté. –