Comment appliquer la fonction aux éléments d'une liste?
Je veux appliquer une fonction à tous les éléments dans la liste, mais je veux vraiment changer les éléments (qui sont des objets), de ne pas afficher les résultats. Je pense que c'est le problème avec l'aide de map()
ou interprétations de la liste.
class Thing(object):
pass
# some collection of things
my_things
# they are all big...
# produces SyntaxError: invalid syntax
[i.size = "big" for i in my_things]
# produces SyntaxError: lambda cannot contain assignment
map(lambda i: i.size="big", [i for i in my_things])
# no error, but is it the preferred way?
for i in my_things:
i.size="big"
Quelle est la façon de le faire?
source d'informationauteur cammil
Vous devez vous connecter pour publier un commentaire.
Et quel est le problème avec
Vous ne souhaitez pas utiliser ni
map
ni liste comprehansion car elles créent de nouvelles listes. Et vous n'avez pas besoin que les frais généraux, ne vous?Alors que je suis d'accord qu'il n'y a rien de mal avec
certaines personnes sont chaud en python one-liners. 😉
Une option est d'ajouter une méthode de jeu à votre classe, qui peut ensuite être appelée à partir de lambda (essentiellement cacher l'attribution dans une fonction):
Pas tout à fait.
Vous pouvez utiliser le
__setattr__
méthode pour assigner l'attribut dans une compréhension de liste. Bien que, selon certains threads, en utilisant des interprétations de la liste sans l'aide de la sortie n'est pas pythonic.peut-être de ce genre sur python3:
ou
si i est dict pas d'objet
sur python2