Je sais que c'est une question plutôt idiote et il y a déjà des réponses similaires, mais elles ne correspondent pas tout à fait, alors ... Comment puis-je effectuer la même opération sur plusieurs variables de manière efficace, tout en "conservant" les variables individuelles? exemple:
a = 3 b = 4 c = 5 a,b,c *= 2 #(obviously this does not work) print(a,b,c)
Ce que je veux comme sortie dans ce scénario est 6, 8, 10. Il est assez important que je puisse toujours utiliser des variables modifiées.
Merci beaucoup pour vos réponses!
6 Réponses :
Vous voudrez peut-être examiner la fonction de carte de Python. Le lien suivant peut être utile: https://www.w3schools.com/python/ref_func_map.asp
Map est votre ami ici, mais vous devez également utiliser le 'décompression implicite de tuple':
>>> a = 3 >>> b = 4 >>> c = 5 >>> d, e, f = map(lambda x: x * 2, [a, b, c]) >>> d 6 >>> e 8 >>> f 10
De cette façon, vous pouvez récupérer les valeurs modifiées sans modifier les valeurs d'origine
Vous pouvez utiliser la fonction lambda numpy ou python associée à map pour faire de même.
Utilisation de numpy:
In [23]: a, b, c = list(map(lambda x: x*2, [a, b, c])) In [24]: a Out[24]: 12 In [25]: b Out[25]: 16 In [26]: c Out[26]: 20
Utilisation de lambda:
In [17]: import numpy as np
In [18]: a = 3
...: b = 4
...: c = 5
...:
In [19]: a,b,c = np.multiply([a, b, c], 2)
In [20]: a
Out[20]: 6
In [21]: b
Out[21]: 8
In [22]: c
Out[22]: 10
Vous pouvez les stocker dans un conteneur, puis utiliser map pour appliquer une fonction sur chaque élément du conteneur
Par exemple avec une liste:
# Define variables and store them in a container a,b,c = 1,2,3 container = (a,b,c) # Apply the function on every element with map container = tuple(map(lambda x: x*2, container)) a,b,c = container
Cela peut également être fait avec les fonctions lambda pour éviter de définir une nouvelle fonction à chaque fois
def function_to_apply(element):
return element*2
# Define variables and store them in a container
a,b,c = 1,2,3
container = (a,b,c)
# Apply the function on every element with map
container = tuple(map(function_to_apply, container))
a,b,c = container
Si vous avez un très grand ensemble de variables et vous voulez les récupérer automatiquement sans avoir à les saisir comme dans a, b, c = container , vous pouvez utiliser dict pour les stocker avec des noms ou exec pour les attribuer dynamiquement.
map documentation: https: // docs .python.org / 3 / library / functions.html # map
Documentation lambda : https: //docs.python.org/3/reference/expressions.html#grammar-token-lambda-expr
Vous pouvez utiliser l'expression de générateur suivante:
a, b, c = 3, 4, 5 a, b, c = (2 * i for i in (a, b, c)) print(a, b, c) # 6 8 10
Vous pouvez utiliser map pour appliquer une fonction à chaque élément d'une liste avec une fonction lambda pour effectuer votre opération. Ensuite, utilisez la décompression de liste pour écraser les valeurs dans les variables originales.
a = 1 b = 2 c = 3 a,b,c = list(map(lambda x: x*2, [a,b,c])) print(a,b,c) # prints: (2, 4, 6)
map renvoie un générateur, c'est pourquoi nous devons créer explicitement la liste à décompresser.
un peu d'explication du code aiderait votre réponse à se démarquer!
Une raison particulière pour laquelle vous ne pouvez pas le faire manuellement? c'est-à-dire
a * = 2, etc.car dans un fichier qui fait déjà plus de 3000 lignes, il devient assez compliqué d'écrire la même commande dix fois. Et aussi assez inefficace.