【发布时间】:2011-09-13 06:13:49
【问题描述】:
我记得我曾经见过一个能够在python中分解列表的运算符。
例如
[[1],[2],[3]]
通过应用该运算符,您可以得到
[1], [2], [3]
该运算符是什么,任何帮助将不胜感激。
【问题讨论】:
我记得我曾经见过一个能够在python中分解列表的运算符。
例如
[[1],[2],[3]]
通过应用该运算符,您可以得到
[1], [2], [3]
该运算符是什么,任何帮助将不胜感激。
【问题讨论】:
如果要将参数列表传递给函数,可以使用 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',除非函数对所有参数使用默认值。在这种情况下,它会按顺序填充它们,超出列表长度的项目使用默认值。
您可以使用tuple 函数将列表转换为元组。包含三个元素的元组与三个单独的元素并没有什么不同,但它提供了一种将所有三个元素一起工作的便捷方式。
li = [[1], [2], [3]]
a, b, c = tuple(li)
print a # [1]
【讨论】:
tuple 毫无意义,因为a, b, c = li 的工作原理相同。
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 想要的,但它是所问问题的正确答案。
【讨论】:
这可以通过运行sum(list_name,[]) 来实现,如here 所述。
您也可以在flattening shallow lists 上找到这个问题。
【讨论】:
sum(1,list_name),而是sum(list_name, [])。