代码之家  ›  专栏  ›  技术社区  ›  Horai Nuri

将多个变量赋给同一个值的最优雅的方法是什么?

  •  6
  • Horai Nuri  · 技术社区  · 6 年前

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

    例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 回复  |  直到 6 年前
        1
  •  7
  •   deceze    6 年前

    我建议你首先使用更少的自变量。任何字面上有 a, b, c, d, e, ... 在中,应该将其重构为更简单的内容。

    已经说过:

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

    生成器创建新的 [] 对于您在 range .

        2
  •  0
  •   jpp    6 年前

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

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