Python initialisation de la liste dans la boucle for
Comment initialiser une liste dans une boucle for:
for x, y in zip(list_x, list_y):
x = f(x, y)
malheureusement, cette boucle ne modifie pas list_x même si je le veux.
Est-il un moyen d'avoir des références pour les éléments de list_x dans la boucle?
Je me rends compte que je pouvais utiliser une compréhension de liste, mais c'est dur à lire quand pour la boucle est très compliqué.
Edit: Mon for
boucle est de 20 lignes. Serait, normalement, vous mettez 20 lignes en une seule liste de compréhension?
- Si le résultat souhaité est seulement la modification de la liste, vous pouvez passer la plupart de la complexité dans
f
et l'utilisation d'une compréhension. Sinon, de manière explicite de la boucle est beaucoup mieux. - Sont il y a vingt lignes ayant des effets secondaires? (Si oui, oubliez les interprétations de la liste!) Et pourquoi n'ont-ils pas partie de
f
? - que voulez-vous dire exactement par des effets secondaires?
- Les instructions d'affectation ont des effets secondaires. Les Variables sont modifiées. Une chose difficile à faire dans une compréhension de liste.
InformationsquelleAutor Neil G | 2011-01-26
Vous devez vous connecter pour publier un commentaire.
Serait-il le faire?
pourquoi serait-liste-de la compréhension d'être compliqué?
Au lieu d'avoir 20 en ligne pour la boucle, vous pouvez utiliser un ensemble de générateur d'expressions ou le résumé d'un sous-ensemble de code dans un
f
fonction.Il est vraiment inutile de parler de ce pourrait être fait w/o voir le code.
f(*tup)
ouf(x, y) for x, y in ...
)f
et vous pouvez même sautertup
s basée sur une condition.[:]
nécessaire?list_x
: vous êtes à la définition de la suite de la compréhension dans cette tranche (qui se trouve être l'ensemble de la liste).list_x
variable.[:]
permettra de faire modifier la liste sur place, c'est à dire visiblement pour tout le monde qui a une référence à la liste. Contraste avec juste écraser la variable locale avec un (référence à l'une) nouvelle liste - tout le monde garde de leur référence à la non modifiée de la liste.C'est juste un pauvre homme verbose compréhension de liste, aussi.
new_list
est un bavard générateur d'expression. Etlist(genexpr)
est en effet équivalent à (mais dans certaines versions plus lents) compréhension de liste.list(new_list(....))
x
liste ou peut-être qu'il veut une toute nouvelle liste, dont il va se référer àx
. Étant donné que, possible descriptives des noms de fonction sontreplacement_x_iterable
et de combinaisons de ceux-ci.