我正在学习python,我有这个简单的列表
z = [1,2,3,4,5,6,7,8,9]
我只是想解压缩它,这会引发语法错误。
a,*b,c = z
>>> a,*b,c = z
File "<stdin>", line 1
a,*b,c = z
^
SyntaxError: invalid syntax
我尝试改变变量的顺序,但同样的错误。任何建议请。
答案 0 :(得分:3)
以下是PEP-3132
的引用例如,如果seq是可切片序列,则以下所有内容 如果seq至少有三个元素,则赋值是等价的:
a, b, c = seq[0], list(seq[1:-1]), seq[-1] a, *b, c = seq [a, *b, c] = seq
在Python2.7中,只有第一个版本是合法语法。
由于你已经知道z
是一个列表,你可以写
a, b, c = z[0], z[1:-1], z[-1]
这适用于Python2.7和Python3.x
答案 1 :(得分:3)
你想要做的事情在Python2中不起作用,因为它不支持扩展元组解包 - 你几乎不得不使用切片。
>>> z = [1,2,3,4,5,6,7,8,9]
>>> a, b, c = z[0], z[1:-1], z[-1]
>>> a
1
>>> b
[2, 3, 4, 5, 6, 7, 8]
>>> c
9
使用Python3,您可以one wildcard:
演示:
>>> z = [1,2,3,4,5,6,7,8,9]
>>> a, *b, c = z
>>> a
1
>>> b
[2, 3, 4, 5, 6, 7, 8]
>>> c
9
>>> *a, b, c = z
>>> a
[1, 2, 3, 4, 5, 6, 7]
>>> b
8
>>> c
9
>>> *a, *b, c = z
File "<stdin>", line 1
SyntaxError: two starred expressions in assignment
Python3.5带有一些additional unpacking generalizations
>>> [1, 2, *[3, 4]]
[1, 2, 3, 4]