Henry Thornton
Henry Thornton

Reputation: 4567

Process list into separate lists

Have:

my_list = [([9, 1, 4], ['b', 'j', 'k']), ([8, 5, 9], ['m', 't', 'y']), ([6, 2, 0], ['p', 'q', 'r'])]

Want (in sequence order):

number_list = [9, 1, 4, 8, 5, 9, 6, 2, 0]
letter_list = ['b', 'j', 'k', 'm', 't', 'y', 'p', 'q', 'r']

Obvious solution is:

for data in my_list:

    try:
        number_list += data[0]
        letter_list += data[1]
    except:
        number_list = data[0]
        letter_list = data[1]

print number_list
print letter_list

> [9, 1, 4, 8, 5, 9, 6, 2, 0]
> ['b', 'j', 'k', 'm', 't', 'y', 'p', 'q', 'r']

Is there a better and/or faster way to achieve this - possibly with a list comprehension?

Upvotes: 0

Views: 68

Answers (1)

Ashwini Chaudhary
Ashwini Chaudhary

Reputation: 250951

>>> from itertools import chain
>>> a, b = [list(chain.from_iterable(x)) for x in zip(*my_list)]
>>> a
[9, 1, 4, 8, 5, 9, 6, 2, 0]
>>> b
['b', 'j', 'k', 'm', 't', 'y', 'p', 'q', 'r']

Upvotes: 6

Related Questions