Получение первых элементов в строке в массиве в Python?

Скажем, у меня есть массив Tuples, s, в виде:

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

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

t = (1, 2, 3)

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

Ответ 1

Нет.

t = tuple(x[0] for x in s)

Ответ 2

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

Просто для пинков, вы также можете сделать:

zip(*s)[0]

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

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

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

Ответ 3

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 возвращает итератор.