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
Vous pouvez faire ceci:
for idx, item in enumerate(list):
if 'foo' in item:
item = replace_all(...)
list[idx] = item
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
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 .
Pour Python 3:
ListOfStrings = []
ListOfStrings.append('foo')
ListOfStrings.append('oof')
for idx, item in enumerate(ListOfStrings):
if 'foo' in item:
ListOfStrings[idx] = "bar"