0

I have a function that returns a tuple of two lists

def two_lists():
    return [1, 2, 3], ['a', 'b', 'c']

I want to loop through the tuple in a manner similar to this

for v1, v2 in two_lists():
   print v1, v2

output:
    1, a
    2, b
    3, c

The only way I have found I find rather cumbersome!

a, b = two_lists()
for i, y in zip(a, b):
    print i, y

Is there a prettier more pythonic way to achieve this?

8
  • If you want to make it terser, you can just do for i, y in zip(*two_lists()), which will upack the tuple in-place. Otherwise, if you're trying to say zip is un-pythonic, I would disagree. Commented Oct 6, 2016 at 18:57
  • Edited to add Python 2 tag. Commented Oct 6, 2016 at 19:21
  • 5
    Please, please, please do not use list comprehensions for their side effects. It's incredibly bad practice and inefficient. There is never a time when that is the correct solution. Commented Oct 6, 2016 at 19:26
  • 3
    So, having a resulting list with [None, None, None, None] is OK? That doesn't seem like the best advice here. I would advise against using that list comp solution. Commented Oct 6, 2016 at 19:28
  • Another nice python 3 way of doing it (Python 3.5 or higher only), which should satisfy all the above complaints: print( *((i,y) for i,y in zip(*twolists()), sep = '\n') Commented Oct 6, 2016 at 19:33

1 Answer 1

7

Sure, you can directly unpack two_lists() in your zip call.

for i, y in zip(*two_lists()):
    print i, y

This is the idiomatic way to do this.

Sign up to request clarification or add additional context in comments.

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.