代码之家  ›  专栏  ›  技术社区  ›  J.C

如何提取*args

  •  1
  • J.C  · 技术社区  · 7 年前
    import random 
    liste = [random.randint(1, 5) for i in range(random.randint(2, 15))]]
    a,*b,c = liste[0], liste[1:len(liste) - 1], liste[len(liste) - 1]
    

    b 例如,我想成为b [4, 5, 2, 2, 3, 1, 4, 5, 4, 5, 3] ,但我明白了 [[4, 5, 2, 2, 3, 1, 4, 5, 4, 5, 3]] . 为什么我在列表中有一个列表,如何修复它?

    基本上我想知道我应该写什么而不是 liste[1:len(liste) - 1] . 在我的要求中,我也必须使用 *b

    3 回复  |  直到 7 年前
        1
  •  2
  •   blhsing    7 年前

    a, *b, c = liste
    

    以便 a c 会是第一个也是最后一个项目 liste 列表,以及 b

        2
  •  0
  •   Poolka    7 年前

    b 而不是 *b . 那么 b 将是一个值列表,而不是包含值列表的列表。

    import random
    liste = [random.randint(1, 5) for i in range(random.randint(2, 15))]
    a, b, c = liste[0], liste[1:len(liste)-1], liste[len(liste)-1]
    print(a, b, c, sep='\n')
    

    输出:

    3
    [2, 1, 1, 1, 2, 3, 2, 1, 3, 1]
    5
    
        3
  •  0
  •   Mad Physicist    7 年前

    所以你有几个选择。首先是除掉明星。您正在尝试将三个输入元素分配给输出元素:

    a, b, c = liste[0], liste[1:-1], liste[-1]
    

    注意我是如何缩短索引的,突然间所有的东西都变得清晰了。

    a, *b, c = listed
    

    这只适用于如果你正试图从前面和后面砍下一个元素。

    最后,您可以始终明确地写出来,而不是一路上创建临时列表:

    a = random.randint(1, 5)
    b = [random.randint(1, 5) for _ in range(random.randint(0, 13)]
    c = random.randint(1, 5)