将多个变量分配给相同值的最优雅方法?

时间:2018-08-21 09:53:06

标签: python variable-assignment

这个问题可能已经被问到了,但是我找不到一个将多个变量分配给一个值而不将其链接的正确方法,所以请耐心等待。

示例1:

a = b = []
a.append('x')
> a = ['x']
> b = ['x']

由于我将'x'附加到a上,所以我不想在b中使用它。


示例2:

a, b = [[], []]
a.append('x')
> a = ['x']
> b = []

按预期工作,但具有多个变量,这真的很丑:

a, b, c, d, e, f, g, h, i j = [[], [], [], [], [], [], ...]

示例3:

默认方式

a = []
b = []
...

与示例2相同,它不具有多个变量。

我想知道javascript中是否存在类似的东西?

a, b, c = [] #this actually gives a ValueError: not enough values to unpack

有什么建议或我仅限于此吗?

注意:出于某些原因,我必须避免为此任务使用词典。 (限制...)

2 个答案:

答案 0 :(得分:7)

我建议您首先使用较少的自变量。任何实际上包含a, b, c, d, e, ...的代码都应重构为更简单的代码。

说过:

a, b, c = ([] for _ in range(3))

生成器会为您在[]中指定的所有项目创建一个新的range

答案 1 :(得分:0)

对于可变数量的连接变量,建议使用词典。您可以使用字典理解来确保未链接列表值。

如果您的变量是真字母,也可以使用string.ascii_lowercase

from string import ascii_lowercase

d = {i: [] for i in ascii_lowercase[:10]}
d['a'].append(1)

print(d)

{'a': [1], 'b': [], 'c': [], 'd': [], 'e': [],
 'f': [], 'g': [], 'h': [], 'i': [], 'j': []}

相反,作为参考,请注意,使用dict.fromkeys将确保对每个键使用相同列表:

d = dict.fromkeys(ascii_lowercase[:10], [])
d['a'].append(1)

print(d)

{'a': [1], 'b': [1], 'c': [1], 'd': [1], 'e': [1],
 'f': [1], 'g': [1], 'h': [1], 'i': [1], 'j': [1]}