alvas
alvas

Reputation: 122022

How to handle variable length sublist unpacking in Python2?

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

Answers (4)

omri_saadon
omri_saadon

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

Paul Panzer
Paul Panzer

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

Rakesh Kumar
Rakesh Kumar

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

Amadan
Amadan

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

Related Questions