猿问

在 python 中一次重新缩放多个变量

在 python 中处理多个变量赋值时,当我尝试一次重新调整所有变量时,我发现它根本不是Pythonic 。请分享您的想法。例如,我想要的是:

a,b,c,d=1,2,3,4原作业

a,b,c,d=2,4,6,8目标。即,重新调整 2 倍

假设现在您有 3000 个变量。是否有可能像Python一直在做的那样,一行代码达到同样的目标?

谢谢!


更新:使用字典或使用 NumPy 数组可能是评论或其他帖子建议的解决方案。但这不是我想要的。我是一个重度Mathematica用户,你可以像这样简单地做到这一点

{a,b,c,d}={1,2,3,4}(通过 Mathematica 列表进行的原始作业)

{a,b,c,d}={1,2,3,4}*2(现在目标已经达到。)

基本上,我正在Python中寻找类似的解决方案。


饮歌长啸
浏览 142回答 4
4回答

不负相思意

我建议使用像 numpy 这样的优化库并使用矩阵/数组。import numpy as np a,b,c,d=1,2,3,4print(a,b,c,d)# Create arrayarray = np.array([a,b,c,d])# Calculatearray = 2*array# Assign variables againa,b,c,d = arrayprint(a,b,c,d)# Or as a two linera,b,c,d=np.array([1,2,3,4])a,b,c,d=2*np.array([1,2,3,4])

明月笑刀无情

我很确定你要找的东西不存在,因为 Python 不像 Mathematica 那样“面向数学”。但是,如果您需要一个没有库、数据结构或其他东西并且只有一行的解决方案,我建议如下:(a,b,c,d) = tuple(map((2).__mul__, (a,b,c,d)))无论如何,我建议使用 NumPy,因为它经过了相当大的优化,并且解决方案更容易阅读。

回首忆惘然

好吧,天真的 Pythonic 方式是这样的:a, b, c, d = (2 * x for x in (1, 2, 3, 4))print(a, b, c, d)  # Prints 2,4,6,8你可以将其封装在一个小类中,然后使用就非常简洁了:class F(object):    def __init__(self, *args):        self._args = args    def __mul__(self, other):        return (x * other for x in self._args)       def __rmul__(self, other):        return (other * x for x in self._args)    a, b, c, d = F(1, 2, 3, 4) * 2print(a, b, c, d)  # Prints 2,4,6,8

慕哥6287543

一个pandas系列可能就是你想要的。import pandas as pd>>> data = pd.Series([1,2,3,4], index=['a', 'b', 'c', 'd'])>>> dataa    1b    2c    3d    4dtype: int64>>> data *= 2>>> dataa    2b    4c    6d    8>>> data['a']2
随时随地看视频慕课网APP

相关分类

Python
我要回答