【问题标题】:Most elegant way to assign multiple variables to the same value?将多个变量分配给相同值的最优雅方法?
【发布时间】:2019-01-27 11:41:08
【问题描述】:

可能已经有人问过这个问题,但我找不到合适的方法来将多个变量分配给一个值而不将它们链接到一个值,所以请耐心等待。

示例 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

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

注意:出于某种原因,我必须避免使用字典来完成这项任务。 (限制...)

【问题讨论】:

    标签: python variable-assignment


    【解决方案1】:

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

    话虽如此:

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

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

    【讨论】:

    • a, b, c = [[] for _ in range(3)] 也是另一种实现方式。
    • 同意,不幸的是,我正在处理带有一些限制的遗留代码。
    • @Bazingaa 不过这样效率更低,因为它会创建一个无用的中间列表。
    • 嗯,对。尽管对于 3 个变量,这无关紧要。但是是的
    【解决方案2】:

    对于可变数量的连接变量,字典是一种推荐的解决方案。您可以使用字典推导来确保列表值未链接。

    如果你的变量是真正的字母,你也可以使用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]}
    

    【讨论】:

      猜你喜欢
      • 2020-07-31
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多