Python就地解压缩似乎没有按预期工作

时间:2017-02-09 18:39:25

标签: python python-2.7

我在这里看到很多关于在元组之前使用*将其扩展为其他东西的问题,但它似乎对我没用。

>>> l1 = (1, 2, 3)
>>> l2 = (0, l1, 4)
>>> l2   (0, (1, 2, 3), 4)
>>> l2 = (0, *l1, 4)
File "<stdin>", line 1  
    l2 = (0, *l1, 4)  
             ^   SyntaxError: invalid syntax 

如你所见。我无法通过*运算符将l1扩展为l2 ...

注意:这是python2.7

2 个答案:

答案 0 :(得分:6)

在python 3.5中引入了就地解包,它适用于更高版本而不是旧版本。

# Python 3.5
In [39]: (3, *l1, 4)
Out[39]: (3, 1, 2, 3, 4)

在旧版本中,您可以使用+运算符或itertools.chain函数进行更长时间的迭代:

In [40]: (3,) + l1 + (4,)
Out[40]: (3, 1, 2, 3, 4)

In [41]: from itertools import chain

In [45]: tuple(chain((3,), l1, (4,)))
Out[45]: (3, 1, 2, 3, 4)

答案 1 :(得分:1)

首先,这些不是lists,而是tuples。它们相似但不一样。

其次,*arg语法称为参数扩展,它仅适用于函数参数

def func(a, b):
    return a + b

my_list = [1, 2]
func(*my_list)

编辑:

显然,在python 3.5中添加了就地解压缩,但对于你遇到的绝大多数python安装,我的答案仍然适用。也许在2020年,当Python 2停止支持时,这将会发生变化,但就目前和未来而言,期望上述情况属实。