次の形式のタプルの配列があるとします。
s = ((1, 23, 34),(2, 34, 44), (3, 444, 234))
そして、行ごとの最初の要素で構成される別のタプルtを返したいと思います。
t = (1, 2, 3)
これを行うための最も効率的な方法はどれですか?もちろん、sを繰り返すこともできますが、それを行うためのより洗練された方法はありますか?
いいえ。
t = tuple(x[0] for x in s)
Ignacioによって提供されたリスト内包法が最もクリーンです。
キックのためだけに、次のこともできます。
zip(*s)[0]
*ss引数のリストに展開されます。つまり、
zip( (1, 23, 34),(2, 34, 44), (3, 444, 234))
また、各タプルに各リストのアイテムが含まれているタプルをzip返します 。nnth
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、イテレータを返します。