Python 2.7 - 解压缩可迭代对象会引发语法错误

时间:2016-01-14 01:10:04

标签: python python-2.7

我正在学习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

我尝试改变变量的顺序,但同样的错误。任何建议请。

2 个答案:

答案 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]