将操作应用于多个变量

时间:2016-07-11 15:25:43

标签: python

我觉得这个解决方案有点矫枉过正,我可能没有正确使用内置版。

有人可以建议一种更好的方法将相同的操作应用于变量列表吗?

编辑 - 或者在不重新分配值的情况下更改它们(如果可能的话)

size = 150
free = 27
used = 123

size, free, used = list(map(lambda x: x * 1024, [size, free, used]))

4 个答案:

答案 0 :(得分:4)

我可能会使用理解/生成器表达而不是= form_for @article, method: :delete, url: articles_path do |f| listmap

lambda

那就是说,如果将这三个名称作为不同的实体(而不是单个列表/元组/ numpy项目数组)确实是有利的,那么你最好把它全部写出来......

size, free, used = (x * 1024 for x in (size, free, used))

答案 1 :(得分:1)

size, free, used=[x*1024 for x in [size, free, used]]

答案 2 :(得分:1)

您可以简单地将变量存储在元组或列表中,这些变量在某种程度上看起来像一个复合:

mv = [1024, 27, 123]

然后,使用list comprehension将转换应用于所有转换:

mv = [i * 1024 for i in mv]

如果您使用的是numpy,您还可以使用np.array并对其每个元素应用转换(默认情况下会这样做):

mv = np.array([1024, 27, 123])
mv *= 1024

但是,如果这是您的代码中唯一使用的话,那么肯定会避免导入numpy

答案 3 :(得分:1)

您可以使用“splat”解压缩将列表或元组的项传递给NamedTuple构造函数。例如,

from collections import namedtuple

TheTuple = namedtuple('TheTuple', ('size', 'free', 'used'))

size = 150
free = 27
used = 123

t = (size, free, used)
foo = TheTuple(*[1024 * x for x in t])
print(foo)

<强>输出

TheTuple(size=153600, free=27648, used=125952)

这甚至可以用于生成器表达式:

foo = TheTuple(*(1024 * x for x in (size, free, used)))

这是一个dict版本,使用“double-splat”运算符**

d = dict(
    size = 150, 
    free = 27, 
    used = 123
)

foo = TheTuple(**{k: 1024 * v for k, v in d.items()})