假设我有一组元组s,形式为:
s = ((1, 23, 34),(2, 34, 44), (3, 444, 234))
我希望返回另一个Tuple,t,每行包含第一个元素:
t = (1, 2, 3)
哪种方法最有效?我当然可以通过s迭代,但有没有更明智的方法呢?
答案 0 :(得分:23)
没有
t = tuple(x[0] for x in s)
答案 1 :(得分:5)
Ignacio给出的列表理解方法是最干净的。
只是为了踢,你也可以这样做:
zip(*s)[0]
*s
将s
扩展为参数列表。所以它相当于
zip( (1, 23, 34),(2, 34, 44), (3, 444, 234))
zip
返回n
个元组,其中每个元组包含每个列表中的nth
项。
答案 2 :(得分:1)
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
返回一个迭代器。