たとえば、次のようなタプルのリストがある場合
a = [(1,2)] * 4
各タプルの最初の要素のリストを作成するにはどうすればよいですか? つまり、[1, 1, 1, 1]
.
リスト内包表記を使用します:
>>> a = [(1,2)] * 4
>>> [t[0] for t in a]
[1, 1, 1, 1]
タプルをアンパックすることもできます:
>>> [first for first,second in a]
[1, 1, 1, 1]
派手にしたい場合は、 と を組み合わせmap
てoperator.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]
phihag のリスト内包表記に代わる 2 つの方法:
[x for x, y in a]
from operator import itemgetter
map(itemgetter(0), a)
いくつかの方法があります:
>>> 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]
タプルのリストがあると仮定します。
lta = [(1,2), (2,3), (44,45), (37,38)]
各タプルの最初の要素にアクセスするには、[0]で添え字を付ける必要があり、各タプルにアクセスして各最初の要素を抽出するには、以下に示すように変数に割り当てることができるリスト内包表記が必要です。
resultant_list = [element[0] for element in lta]
>>> resultant_list
[1, 2, 44, 37]
zip()
最近Pythonの機能を知りました。ここでやりたいことを行う別の方法は次のとおりです。
list( zip( *a )[0] )
tup_list = zip( list1, list2 )
は 2 つのリストを 2 タプルのリストにインターリーブしますzip( *tup_list )
が、反対のことをlist1
行い、 のタプルと のタプルのリストになりlist2
ます。
a = [(1,2)] * 4
first_els = [x[0] for x in a]