12

次の形式のタプルの配列があるとします。

s = ((1, 23, 34),(2, 34, 44), (3, 444, 234))

そして、行ごとの最初の要素で構成される別のタプルtを返したいと思います。

t = (1, 2, 3)

これを行うための最も効率的な方法はどれですか?もちろん、sを繰り返すこともできますが、それを行うためのより洗練された方法はありますか?

4

3 に答える 3

23

いいえ。

t = tuple(x[0] for x in s)
于 2010-01-13T04:32:18.147 に答える
5

Ignacioによって提供されたリスト内包法が最もクリーンです。

キックのためだけに、次のこともできます。

zip(*s)[0]

*ss引数のリストに展開されます。つまり、

zip( (1, 23, 34),(2, 34, 44), (3, 444, 234))

また、各タプルに各リストのアイテムが含まれているタプルをzip返します 。nnth

于 2010-01-13T04:39:59.183 に答える
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、イテレータを返します。

于 2010-01-13T04:48:44.050 に答える