我有来自两个不同对象的两组相同的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个变量。
发布于 2013-09-24 20:33:21
您已经注意到,对于1000个变量的情况,复制将是一个麻烦,这是很好的。这意味着您需要提升一个抽象级别,这样您就可以得到一个列表或一个字典,而不是1000个变量,然后循环起来。
例如,如果从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-24 20:29:53
你可以:
x,y,z = [v - 1 for v in (x,y,z)]然而,它无助于一个可能的1000个变量场景。现在还不清楚您想要做什么,除了有一个list或dict,而不是单独的变量。
发布于 2013-09-24 20:29:49
如果我对你的理解正确,你可以使用列表理解:
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_listhttps://stackoverflow.com/questions/18991398
复制相似问题