【问题标题】:python decompose a listpython分解一个列表
【发布时间】:2011-09-13 06:13:49
【问题描述】:

我记得我曾经见过一个能够在python中分解列表的运算符。

例如

[[1],[2],[3]]

通过应用该运算符,您可以得到

[1], [2], [3]

该运算符是什么,任何帮助将不胜感激。

【问题讨论】:

    标签: python list operators


    【解决方案1】:

    如果要将参数列表传递给函数,可以使用 splat 运算符*。以下是它的工作原理:

    list = [1, 2, 3]
    function_that_takes_3_arguments(*list)
    

    如果要将列表的内容赋值给变量,可以列表解包:

    a, b, c = list # a=1, b=2, c=3
    

    【讨论】:

    • 我猜* 是有问题的运营商。它只适用于函数调用!
    • 啊,最后,我在尝试 *,但现在知道它只在函数调用中有效,谢谢大家的帮助。
    • 注意:如果列表比预期的参数短,它将抛出例如。 TypeError: func() missing 1 required positional argument: 'c',除非函数对所有参数使用默认值。在这种情况下,它会按顺序填充它们,超出列表长度的项目使用默认值。
    【解决方案2】:

    您可以使用tuple 函数将列表转换为元组。包含三个元素的元组与三个单独的元素并没有什么不同,但它提供了一种将所有三个元素一起工作的便捷方式。

    li = [[1], [2], [3]]
    a, b, c = tuple(li)
    print a  # [1]
    

    【讨论】:

    • 添加tuple 毫无意义,因为a, b, c = li 的工作原理相同。
    • 在这个例子中是没有意义的,但如果你不马上解压它,它不是。你可以用元组做一些你不能用列表做的事情:特别是,将它们用作字典键。
    【解决方案3】:

    OP 问题的正确答案:将列表[[1],[2],[3]] 转换为[1], [2], [3] 的“那个运算符是什么”是tuple(),因为[1], [2], [3] 是一个元组。内置函数 tuple 会将任何序列或可迭代对象转换为元组,尽管很少需要这样做,因为正如已经指出的,解包列表就像解包元组一样简单:

    a, b, c = [[1],[2],[3]]
    

    给出与

    相同的结果
    a, b, c = tuple([[1],[2],[3]])
    

    这可能不是 OP 想要的,但它是所问问题的正确答案。

    【讨论】:

      【解决方案4】:

      这可以通过运行sum(list_name,[]) 来实现,如here 所述。

      您也可以在flattening shallow lists 上找到这个问题。

      【讨论】:

      • 从您自己的链接来看,它似乎不是sum(1,list_name),而是sum(list_name, [])
      猜你喜欢
      • 2012-04-07
      • 2017-02-13
      • 2012-05-21
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      • 1970-01-01
      相关资源
      最近更新 更多