如何处理 Python2 中的可变长度子列表解包?
How to handle variable length sublist unpacking in Python2?
如何在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中的问题的。
Python 2 没有 splat 语法 (*item
)。最简单最直观的方法就是绕一圈:
for row in x:
i = row[0]
item = row[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]
你可以试试这个:-
x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]
for item in x:
print (list(item[1:]))
如果您打算大量使用此构造,可能值得编写一个小助手:
def nibble1(nested):
for vari in nested:
yield vari[0], vari[1:]
然后你可以写你的循环
for i, item in nibble1(x):
etc.
但我有点怀疑你是否会觉得它足够优雅...
如何在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中的问题的。
Python 2 没有 splat 语法 (*item
)。最简单最直观的方法就是绕一圈:
for row in x:
i = row[0]
item = row[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]
你可以试试这个:-
x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]
for item in x:
print (list(item[1:]))
如果您打算大量使用此构造,可能值得编写一个小助手:
def nibble1(nested):
for vari in nested:
yield vari[0], vari[1:]
然后你可以写你的循环
for i, item in nibble1(x):
etc.
但我有点怀疑你是否会觉得它足够优雅...