web-dev-qa-db-fra.com

python modifier l'élément dans la liste, sauvegarder de nouveau dans la liste

J'ai une intuition dont j'ai besoin pour accéder à un élément dans une liste (de chaînes), modifier cet élément (sous forme de chaîne) et le remettre dans la liste dans le même index

J'ai du mal à remettre un élément dans le même index

for item in list:
    if "foo" in item:
        item = replace_all(item, replaceDictionary)
        list[item] = item
        print item

maintenant je reçois une erreur

TypeError: list indices must be integers, not str

en raison de cette ligne list[item] = item

ce qui a du sens! mais je ne sais pas comment remettre l'élément dans la liste à ce même index en utilisant python

quelle est la syntaxe pour cela? Idéalement, la boucle for peut garder une trace de l'index auquel je suis actuellement

27
CQM

Vous pouvez faire ceci:

for idx, item in enumerate(list):
   if 'foo' in item:
       item = replace_all(...)
       list[idx] = item
45
Cat Plus Plus

Vous devez utiliser la fonction énumération: documents python

for place, item in enumerate(list):
    if "foo" in item:
        item = replace_all(item, replaceDictionary)
        list[place] = item
        print item

En outre, c'est une mauvaise idée d'utiliser la liste de mots comme variable, car il s'agit d'un mot réservé en python.

Puisque vous avez eu des problèmes avec énumération, une alternative à la bibliothèque itertools :

for place, item in itertools.Zip(itertools.count(0), list):
    if "foo" in item:
        item = replace_all(item, replaceDictionary)
        list[place] = item
        print item
7
Spencer Rathbun

Un idiome commun pour changer chaque élément d'une liste ressemble à ceci:

for i in range(len(L)):
    item = L[i]
    # ... compute some result based on item ...
    L[i] = result

Cela peut être réécrit en utilisant enumerate () comme:

for i, item in enumerate(L):
    # ... compute some result based on item ...
    L[i] = result

Voir énumérer .

4
Ershadul

Pour Python 3:

ListOfStrings = []
ListOfStrings.append('foo')
ListOfStrings.append('oof')
for idx, item in enumerate(ListOfStrings):
if 'foo' in item:
    ListOfStrings[idx] = "bar"
0
Matthew Cox