Reputation: 122022
How to handle variable length sublist unpacking in Python2?
In Python3, if I have variable sublist length, I could use this idiom:
>>> 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]
In Python2, it's an invalid syntax:
>>> 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
BTW, this question is a little different from Idiomatic way to unpack variable length list of maximum size n, where the solution requires the knowledge of a fixed length.
And this question is specific to resolving the problem in Python2.
Upvotes: 6
Views: 639
Reputation: 10621
You also can do this:
x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]
for lista in x:
print (lista[1:])
Or using list comprehension as well:
x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]
new_li = [item[1:] for item in x]
Upvotes: 1
Reputation: 53029
If you're planning on using this construct a lot it may be worthwhile writing a little helper:
def nibble1(nested):
for vari in nested:
yield vari[0], vari[1:]
then you could write your loop
for i, item in nibble1(x):
etc.
But I somehow doubt you'll find that elegant enough...
Upvotes: 2
Reputation: 4420
You can try This:-
x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]
for item in x:
print (list(item[1:]))
Upvotes: 0
Reputation: 198324
Python 2 does not have the splat syntax (*item
). The simplest and the most intuitive way is the long way around:
for row in x:
i = row[0]
item = row[1:]
Upvotes: 5