Извлечь массив из списка в Python - PullRequest
4 голосов
/ 20 марта 2009

Если у меня есть такой список:

>>> data = [(1,2),(40,2),(9,80)]

как мне извлечь два списка [1,40,9] и [2,2,80]? Конечно, я могу итерировать и извлекать числа самостоятельно, но я думаю, что есть лучший способ?

Ответы [ 3 ]

27 голосов
/ 20 марта 2009

Операция распаковки:

In [1]: data = [(1,2),(40,2),(9,80)]
In [2]: zip(*data)
Out[2]: [(1, 40, 9), (2, 2, 80)]

Редактировать: Вы можете разложить полученный список по назначению:

In [3]: first_elements, second_elements = zip(*data)

А если вам действительно нужны списки в качестве результатов:

In [4]: first_elements, second_elements = map(list, zip(*data))

Чтобы лучше понять, почему это работает:

zip(*data)

эквивалентно

zip((1,2), (40,2), (9,80))

Два кортежа в списке результатов составлены из первых элементов аргументов zip () и из вторых элементов аргументов zip ().

14 голосов
/ 20 марта 2009

Список понимания спасения дня:

first = [x for (x,y) in data]
second = [y for (x,y) in data]
5 голосов
/ 20 марта 2009

Существует также

In [1]: data = [(1,2),(40,2),(9,80)]
In [2]: x=map(None, *data)
Out[2]: [(1, 40, 9), (2, 2, 80)]
In [3]: map(None,*x)
Out[3]: [(1, 2), (40, 2), (9, 80)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...