6

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.

1

4 Answers 4

5

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:]
Sign up to request clarification or add additional context in comments.

1 Comment

or on one line i, item = row[0], row[1:] which I personally prefer
2

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...

Comments

1

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]

Comments

0

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:]))

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.