Нехай "s скажемо, у мене є масив Tuples, s, у вигляді:
s = ((1, 23, 34),(2, 34, 44), (3, 444, 234))
і я хочу повернути ще один кортеж, t, що складається з першого елемента в ряд:
t = (1, 2, 3)
Який би найефективніший метод зробити це? Я, звичайно, міг би просто перебрати через s, але чи є якийсь химерний спосіб зробити це?
Відповіді:
23 за відповідь № 1Немає.
t = tuple(x[0] for x in s)
5 для відповіді № 2
Метод розуміння списків, наданий Ігнасіо, є найчистішим.
Тільки для ударів, ви також можете зробити:
zip(*s)[0]
*s
розширюється s
у список аргументів. Отже, це рівнозначно
zip( (1, 23, 34),(2, 34, 44), (3, 444, 234))
І zip
повертає n
кортежі, де кожен кортеж містить nth
елемент із кожного списку.
1 для відповіді № 3
import itertools
s = ((1, 23, 34),(2, 34, 44), (3, 444, 234))
print(next(itertools.izip(*s)))
itertools.izip
повертає ітератор. The next
функція повертає наступний (і в цьому випадку перший) елемент з ітератора.
У Python 2.x, zip
повертає кортеж.
izip
використовує менше пам'яті, оскільки ітератори не генерують їх вміст до необхідності.
У Python 3 zip
повертає ітератор.