如何减去多个变量?蟒蛇

时间:2013-09-24 20:27:24

标签: python int hardcode

我有来自两个不同对象的两组相同int变量的关键字,但是一个开始它的第一个元素为0而另一个元素为1

a = 0, b = 5, c = 7 # var_abc
x = 1, y = 6, d = 6 # var_xyz

为了做其他进程,我必须将var_xyz转换为var_xyz == var_abc,所以我必须为var_xyz中的每个变量编写这行代码:

x,y,z = x-1, y-1, z-1

如果我们只是在var_xyz中实例化变量,我们可以这样做:

x,y,z = (0,)*3

还有另一种方法,我不需要为var_xyz中的每个变量硬编码var-1吗?想象一下,如果var_xyz中有1000个变量。

4 个答案:

答案 0 :(得分:3)

您已经注意到,对于一千个变量的情况,重复将是一个麻烦,这很好。这表明你需要提升一个抽象层次,这样你就可以有一个列表或一个字典,而不是一千个变量,然后可以循环。

例如,如果从0开始计算变量是有意义的,则可以使用列表:

>>> vv = [10,20,30,40,50]
>>> vv[3]
40

然后使用列表推导来进行减法:

>>> vv = [v-1 for v in vv]
>>> vv
[9, 19, 29, 39, 49]
>>> vv[3]
39

或者如果变量具有名称很重要,您可以使用字典:

>>> # first, let's make a test dictionary
>>> from string import ascii_lowercase
>>> d = {k: i for i, k in enumerate(ascii_lowercase[:10])}
>>> d
{'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3, 'g': 6, 'f': 5, 'i': 8, 'h': 7, 'j': 9}
>>> d['d']
3

并使用字典理解来简化减法:

>>> d = {k: v-1 for k,v in d.iteritems()}
>>> d['d']
2

答案 1 :(得分:0)

你可以这样做:

x,y,z = [v - 1 for v in (x,y,z)]

然而,这对1000可变场景没有帮助。除了使用listdict而不是单独的变量之外,目前还不清楚你想做什么。

答案 2 :(得分:-1)

如果我理解正确,你可以使用列表理解:

orig_list = [x,y,z]
minus_list = [value - 1 for value in orig_list]
# if desired put a,b,c up there or...
a,b,c = minus_list

答案 3 :(得分:-4)

使用列表或词典。就是这样。