Essayez ceci:
for i in xrange(len(data)):
data[i] = "everything"
Le problème fondamental que vous rencontrez est que lorsque vous écrivez data[i]
, avec data
étant une liste, les i
doit être un entier, un index numérique dans la liste. Mais dans la boucle
for item in data
item
est la chose réelle qui est la liste, à savoir une chaîne, et non l'indice numérique de la chose. xrange
est un itérateur qui produit des nombres au lieu des valeurs de la liste, vous pouvez donc l'utiliser.
Une alternative serait
for i, _ in enumerate(data):
data[i] = "everything"
La fonction enumerate
vous donne un itérateur sur tuples de la forme (index, item)
, donc tout ce que vous devez faire est de prendre l'index et oublier l'élément. Je ne suis pas sûr que d'une façon ou l'autre (enumerate
ou xrange
) sera significativement plus rapide ou mieux, car je pense que les listes stockent leur longueur dans une variable de sorte qu'il peut être rapidement consulté sans compter les éléments de la liste.
Cependant, si vous avez besoin de l'ancienne valeur de la liste pour calculer la nouvelle valeur de la liste, le chemin sera probablement un peu plus rapide enumerate
parce que vous éviter de faire regarder Python l'élément dans la liste:
for i, item in enumerate(data):
data[i] = func(item)
Ce genre de chose est mieux exprimée en compréhension de liste, si:
data = [func(item) for item in data]
Lorsque vous faites cela, Python passera par chaque élément data
, appliquer la fonction, et construire une nouvelle liste des résultats automatiquement, y Vous n'avez pas besoin de mettre le résultat de func(item)
au bon endroit dans la liste. Votre exemple original pourrait effectivement être exprimé comme suit:
Il semble un peu étrange (ou solution de contournement), mais il fonctionne correctement. Je ne savais pas que les éléments primordiaux (dans la liste) devaient recevoir leur ID. Merci. –
@sigo: ce n'est en fait pas une solution de contournement, c'est la façon 100% correcte et parfaitement normale de faire ce genre de tâche (mais notez ce que j'ai dit à propos des listes de compréhension). –
Dans ce cas particulier, la compréhension de la liste pourrait être remplacée par la plus rapide 'data = [" tout "] * len (data)'. – EOL