Python - применить операцию к нескольким переменным

Я знаю, что это довольно глупый вопрос, и на подобные уже есть ответы, но они не совсем подходят, так что... Как я могу эффективно выполнять одну и ту же операцию с несколькими переменными, «сохраняя» отдельные переменные? пример:

a = 3
b = 4
c = 5
a,b,c *= 2  #(obviously this does not work)
print(a,b,c) 

В этом сценарии я хочу получить результат 6, 8, 10. Очень важно, чтобы я все еще мог использовать измененные переменные.

Большое спасибо за ваши ответы!

Любая конкретная причина, по которой вы не можете сделать это вручную? то есть a *= 2 и т. д.

fixatd 20.03.2019 15:19

потому что в файле, который уже превышает 3000 строк, становится довольно грязно писать одну и ту же команду десять раз. И тоже достаточно неэффективно.

RKBock 20.03.2019 22:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
1 631
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Возможно, вы захотите изучить функцию карты Python. Следующая ссылка может быть полезной: https://www.w3schools.com/python/ref_func_map.asp

Map здесь ваш друг, но вам также нужно использовать «неявную распаковку кортежа»:

>>> a = 3
>>> b = 4
>>> c = 5
>>> d, e, f = map(lambda x: x * 2, [a, b, c])
>>> d
6
>>> e
8
>>> f
10

Таким образом, вы можете вернуть измененные значения без изменения исходных значений.

Ответ принят как подходящий

Вы можете использовать лямбда-функцию numpy или python в сочетании с картой, чтобы сделать то же самое.

Использование numpy:

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

Использование лямбды:

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

Вы можете хранить их в контейнере, а затем использовать map для применения одной функции к каждому элементу контейнера
Например со списком:

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


Это также можно сделать с помощью лямбда-функции, чтобы каждый раз не определять новую функцию

# 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

Если у вас действительно большой набор переменных, и вы хотите получить их автоматически, не вводя каждую из них, как в a,b,c = container, вы можете использовать диктовать для их хранения с именами или функцию исполнитель для их динамического назначения.

map документация: https://docs.python.org/3/library/functions.html#map
lambda документация: https://docs.python.org/3/reference/expressions.html#grammar-token-lambda-expr

Вы можете использовать следующее выражение генератора:

a, b, c = 3, 4, 5
a, b, c = (2 * i for i in (a, b, c))
print(a, b, c)
# 6 8 10

Вы можете использовать карту, чтобы применить функцию к каждому элементу списка с лямбда-функцией для выполнения вашей операции. Затем используйте распаковку списка, чтобы перезаписать значения в исходных переменных.

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 возвращает генератор, поэтому нам нужно явно создать список для распаковки.

небольшое объяснение кода поможет вашему ответу выделиться!

Sagar 20.03.2019 18:03

Другие вопросы по теме