为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

饮歌长啸 2023-12-29 15:07:56
在 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中寻找类似的解决方案。
查看完整描述

4 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

我建议使用像 numpy 这样的优化库并使用矩阵/数组。


import numpy as np 


a,b,c,d=1,2,3,4

print(a,b,c,d)


# Create array

array = np.array([a,b,c,d])


# Calculate

array = 2*array


# Assign variables again

a,b,c,d = array

print(a,b,c,d)


# Or as a two liner

a,b,c,d=np.array([1,2,3,4])

a,b,c,d=2*np.array([1,2,3,4])


查看完整回答
反对 回复 2023-12-29
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

我很确定你要找的东西不存在,因为 Python 不像 Mathematica 那样“面向数学”。但是,如果您需要一个没有库、数据结构或其他东西并且只有一行的解决方案,我建议如下:

(a,b,c,d) = tuple(map((2).__mul__, (a,b,c,d)))

无论如何,我建议使用 NumPy,因为它经过了相当大的优化,并且解决方案更容易阅读。


查看完整回答
反对 回复 2023-12-29
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

好吧,天真的 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) * 2

print(a, b, c, d)  # Prints 2,4,6,8


查看完整回答
反对 回复 2023-12-29
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

一个pandas系列可能就是你想要的。


import pandas as pd

>>> data = pd.Series([1,2,3,4], index=['a', 'b', 'c', 'd'])

>>> data

a    1

b    2

c    3

d    4

dtype: int64

>>> data *= 2

>>> data

a    2

b    4

c    6

d    8

>>> data['a']

2


查看完整回答
反对 回复 2023-12-29
  • 4 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信