1

我有来自两个不同对象的两组相同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

4 回答 4

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
于 2013-09-24T20:33:21.303 回答
0

你可以做:

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

但是,它无助于可能的 1000 变量场景。目前还不清楚你想做什么,除了有一个listdict而不是单独的变量。

于 2013-09-24T20:29:53.450 回答
-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
于 2013-09-24T20:29:49.747 回答
-4

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

于 2013-09-24T20:29:06.480 回答