次の形式のタプルの配列があるとします。
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]
*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
、イテレータを返します。