Получение первых элементов на строку в массиве в Python - PullRequest
12 голосов
/ 13 января 2010

Допустим, у меня есть массив кортежей s в виде:

s = ((1, 23, 34),(2, 34, 44), (3, 444, 234))

и я хочу вернуть еще один кортеж t, состоящий из первого элемента в строке:

t = (1, 2, 3)

Какой самый эффективный способ сделать это? Конечно, я мог бы просто перебрать s, но есть ли более приятный способ сделать это?

Ответы [ 3 ]

23 голосов
/ 13 января 2010

номер

t = tuple(x[0] for x in s)
5 голосов
/ 13 января 2010

Метод понимания списка, данный Игнасио, является самым чистым.

Только для ударов, вы также можете сделать:

zip(*s)[0]

*s расширяет s в список аргументов. Так что это эквивалентно

zip( (1, 23, 34),(2, 34, 44), (3, 444, 234))

И zip возвращает n кортежей, где каждый кортеж содержит элемент nth из каждого списка.

1 голос
/ 13 января 2010
import itertools
s = ((1, 23, 34),(2, 34, 44), (3, 444, 234))
print(next(itertools.izip(*s)))

itertools.izip возвращает итератор. Функция next возвращает следующий (и в данном случае первый) элемент из итератора.

В Python 2.x zip возвращает кортеж. izip использует меньше памяти, поскольку итераторы не генерируют свое содержимое до тех пор, пока это не потребуется.

В Python 3 zip возвращает итератор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...