将列表解压缩到元组中间

时间:2015-06-09 16:53:35

标签: python list python-3.x tuples

我有一个不确定大小的列表:

l = [...]

我想将此列表解压缩为具有其他值的元组,但以下内容失败:

t = ("AA", "B", *l, "C")

我如何形成以下内容?

t = ("AA", "B", l[0], ..., l[:-1], "C")

编辑:只做一个切片[a:b]也很好:

t = ("AA", "B", l[a], ..., l[b], "C")

3 个答案:

答案 0 :(得分:8)

你不能通过替换类似的值来解压缩到元组中(但是 - 请参阅PEP 448),因为解包只会在左侧表达式上发生,或者如错误消息所示,赋值目标

此外,赋值目标应具有有效的Python变量。在你的情况下,你也在元组中有字符串文字。

但你可以通过连接三个元组来构造你想要的元组,就像这样

>>> l = [1, 2, 3, 4]
>>> ("A", "B") + tuple(l[:-1]) + ("C",)
('A', 'B', 1, 2, 3, 'C')
>>> ("A", "B") + tuple(l) + ("C",)
('A', 'B', 1, 2, 3, 4, 'C')

答案 1 :(得分:1)

从python 3.5开始,您现在可以使用第一种方法:

>>> l = [1, 2, 3]
>>> t = ("AA", "B", *l, "C")
>>> t
('AA', 'B', 1, 2, 3, 'C')

您可以按照预期使用切片:

>>> ("AA", "B", *l[:-1], "C")
('AA', 'B', 1, 2, 'C')

相关PEP,供参考:PEP448

答案 2 :(得分:0)

您可以flatten the list然后转换为元组。

>>> import itertools
>>> l=[1,2,3,4]
>>> t = ('A', 'B', l, 'C')
>>> t
('A', 'B', [1, 2, 3, 4], 'C')
>>> tuple(itertools.chain.from_iterable(t))
('A', 'B', 1, 2, 3, 4, 'C')
>>>