洋書、時々プログラミング

博士課程修了→メーカーという経路を辿っている人の日常

pythonでリストの一部のみをfoo loopで利用する方法

pytorchで機械学習などをやっていて、dataloaderから4つのoutputがあるのに対して、実際は先頭2個の値しか使わない時、アンダーバーを使って使わない場所を表現するいうことは見たことがあった。

for a,b,_ in dataloader:

一方で、dataloaderが複数あり、一方のdataloaderでは4つ、もう一方では3つのoutputがある場合、それぞれに対してfor構文を記載すると煩雑になる。 そのような場合はアスタリスクを使って以下のように記載するのが便利

for a,b,*_ in dataloader:

numpyを用いたサンプルコードは以下の通り。

import numpy as np

sample_list = np.random.randint(0,10,(5,4))

print(sample_list)
'''
[[4 3 0 0]
 [5 4 4 1]
 [2 2 6 2]
 [5 8 7 0]
 [5 3 5 1]]
 '''

for a in sample_list:
    print(a) # aに1x5の配列が格納される
    
'''
[4 3 0 0]
[5 4 4 1]
[2 2 6 2]
[5 8 7 0]
[5 3 5 1]
'''

for a,b,c,d in sample_list:
    print(a) # aに数値が格納される
    
'''
4
5
2
5
5
'''
    

for a,b, *_ in sample_list:
    print(a,b) # aには1列目、bには2列目の値が格納される。
    
'''
4 3
5 4
2 2
5 8
5 3
'''