0

たとえば、次のようなタプルのリストがある場合

a = [(1,2)] * 4

各タプルの最初の要素のリストを作成するにはどうすればよいですか? つまり、[1, 1, 1, 1].

4

6 に答える 6

7

リスト内包表記を使用します:

>>> a = [(1,2)] * 4
>>> [t[0] for t in a]
[1, 1, 1, 1]

タプルをアンパックすることもできます:

>>> [first for first,second in a]
[1, 1, 1, 1]

派手にしたい場合は、 と を組み合わせmapoperator.itemgetterください。Python 3 ではlist、イテラブルの代わりにリストを取得するために、構造をラップする必要があります。

>>> import operator
>>> map(operator.itemgetter(0), a)
<map object at 0x7f3971029290>
>>> list(map(operator.itemgetter(0), a))
[1, 1, 1, 1]
于 2012-06-27T16:45:40.227 に答える
6

phihag のリスト内包表記に代わる 2 つの方法:

[x for x, y in a]

from operator import itemgetter
map(itemgetter(0), a)
于 2012-06-27T16:47:20.930 に答える
4

いくつかの方法があります:

>>> a = [(1,2)] * 4

>>> # List comprehension
>>> [x for x, y in a]
[1, 1, 1, 1]

>>> # Map and lambda
>>> map(lambda t: t[0], a)
[1, 1, 1, 1]

>>> # Map and itemgetter
>>> import operator
>>> map(operator.itemgetter(0), a)
[1, 1, 1, 1]

リスト内包表記が導入されたとき、 mapを使用する手法は支持されなくなりましたが、現在は並列 map/reduce および multiprocessing 手法により復活しています。

>>> # Multi-threading approach
>>> from multiprocessing.pool import ThreadPool as Pool
>>> Pool(2).map(operator.itemgetter(0), a)
[1, 1, 1, 1]

>>> # Multiple processes approach
>>> from multiprocessing import Pool
>>> def first(t):
        return t[0]
>>> Pool(2).map(first, a)
[1, 1, 1, 1]
于 2012-06-27T16:48:25.170 に答える
0

タプルのリストがあると仮定します。

lta = [(1,2), (2,3), (44,45), (37,38)]

各タプルの最初の要素にアクセスするには、[0]で添え字を付ける必要があり、各タプルにアクセスして各最初の要素を抽出するには、以下に示すように変数に割り当てることができるリスト内包表記が必要です。

resultant_list = [element[0] for element in lta]
>>> resultant_list
[1, 2, 44, 37]
于 2012-06-27T21:47:46.253 に答える
0

zip()最近Pythonの機能を知りました。ここでやりたいことを行う別の方法は次のとおりです。

list( zip( *a )[0] )

tup_list = zip( list1, list2 )は 2 つのリストを 2 タプルのリストにインターリーブしますzip( *tup_list )が、反対のことをlist1行い、 のタプルと のタプルのリストになりlist2ます。

于 2012-06-28T18:43:17.003 に答える
0
a = [(1,2)] * 4
first_els = [x[0] for x in a]
于 2012-06-27T16:46:58.723 に答える