Ответ 1
Нет.
t = tuple(x[0] for x in s)
Скажем, у меня есть массив Tuples, s, в виде:
s = ((1, 23, 34),(2, 34, 44), (3, 444, 234))
и я хочу вернуть другой Tuple, t, состоящий из первого элемента в строке:
t = (1, 2, 3)
Какой был бы самый эффективный метод для этого? Я мог бы, конечно, просто перебирать s, но есть ли какой-нибудь способ сделать это?
Нет.
t = tuple(x[0] for x in s)
Метод понимания списка, заданный Ignacio, является самым чистым.
Просто для пинков, вы также можете сделать:
zip(*s)[0]
*s
расширяет s
в список аргументов. Таким образом, это эквивалентно
zip( (1, 23, 34),(2, 34, 44), (3, 444, 234))
И zip
возвращает n
кортежи, где каждый кортеж содержит элемент nth
из каждого списка.
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
возвращает итератор.