将列表解包到元组的中间
Unpack list into middle of a tuple
我有一个不确定大小的列表:
l = [...]
我想将这个列表解压缩到一个具有其他值的元组中,但下面的操作失败了:
t = ("AA", "B", *l, "C")
如何形成以下内容?
t = ("AA", "B", l[0], ..., l[:-1], "C")
编辑:只做一片 [a:b] 也很好:
t = ("AA", "B", l[a], ..., l[b], "C")
您不能通过替换这样的值来解包成元组(目前 - 请参阅 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')
您可以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')
>>>
从 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
我有一个不确定大小的列表:
l = [...]
我想将这个列表解压缩到一个具有其他值的元组中,但下面的操作失败了:
t = ("AA", "B", *l, "C")
如何形成以下内容?
t = ("AA", "B", l[0], ..., l[:-1], "C")
编辑:只做一片 [a:b] 也很好:
t = ("AA", "B", l[a], ..., l[b], "C")
您不能通过替换这样的值来解包成元组(目前 - 请参阅 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')
您可以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')
>>>
从 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