如何在Python2中处理可变长度子列表解包?

时间:2017-01-24 08:40:47

标签: python python-2.7 list nested-lists

如何在 Python2

中处理可变长度子列表解包

在Python3中,如果我有可变的子列表长度,我可以使用这个习语:

>>> x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]
>>> for i, *item in x:
...     print (item)
... 
[2, 3, 4, 5]
[4, 6]
[5, 6, 7, 8, 9]

在Python2中,它的语法无效:

>>> x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]
>>> for i, *item in x:
  File "<stdin>", line 1
    for i, *item in x:
           ^
SyntaxError: invalid syntax
顺便说一句,这个问题与Idiomatic way to unpack variable length list of maximum size n略有不同,其中解决方案需要固定长度的知识。

这个问题特定于解决Python2中的问题。

4 个答案:

答案 0 :(得分:5)

Python 2没有splat语法(*item)。最简单,最直观的方式是漫长的方式:

for row in x:
    i = row[0]
    item = row[1:]

答案 1 :(得分:2)

如果你计划大量使用这个结构,那么写一个小帮手可能是值得的:

def nibble1(nested):
    for vari in nested:
        yield vari[0], vari[1:]

然后你可以写你的循环

for i, item in nibble1(x):
    etc.

但我怀疑你会发现那么优雅......

答案 2 :(得分:1)

你也可以这样做:

x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]

for lista in x:
  print (lista[1:])

或者也使用列表理解:

x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]

new_li = [item[1:] for item in x]

答案 3 :(得分:0)

你可以试试这个: -

x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]
for item in x:
    print (list(item[1:]))