##概要
表題の通り。
一次元配列のリスト(A)にある値が二次元配列のリスト(B)の【ID】列に存在するとき、Bの【name】列の値を取得する方法。
上記はslackのapiで遊んでいたときに分かったことで、それを以下にまとめた。
print(name_list)
['U012JDYRD2T', 'U012X478FNZ']
print(data)
[['name', 'id'],
['Slackbot', 'USLACKBOT'],
['test_1', 'U012JDYRD2T'], #ここが欲しい
['test_5', 'U012JDYSN07'],
['kita', 'U012X478FNZ'],#ここが欲しい
['test_4', 'U012XQBE63X'],
['test_bot', 'U012YTNNPB5'],
['test_3', 'U012ZC8AQ8K'],
['tese_2', 'U013BQDLK6V']]
print(result)
['test_1','kita']
##方法1
result = []
for data_id in data:
if data_id[1] in name_list:
result.append(data_id[0])
①ループ分【data_id in data】
は、dataを一つずつdata_idに格納。
②【if data_id[1] in name_list】
は、【id】列(data_id[1])とname_listが一致した場合という条件
③【result.append(data_id[0])】
は【result】というリストに【name】列(data_id[0])を追加
##方法2
result = []
result = [data_id[0] for data_id in data if data_id[1] in name_list]
理屈としては方法1と同じ。スマート。
##方法3
r = []
r2 = []
for i in data:
r = r + i
for i in name_list:
tmp = (r.index(i)) - 1
r2.append(r[tmp])
①rにdataを一つずつ格納。['name','id','Slackbot','USLACKBOT'…]
と格納される。
②name,idと順番に格納されていることを利用する。
つまり「U012X478FNZ」
の一つ前は「kita」
であり、「U012JDYRD2T」
の一つ前は「test_1」
であるということ。
③なので【tmp = (r.index(i)) - 1】
では、「U012X478FNZ」のインデックス(何番目か)から【-1】することで、その直前である「kita」のインデックスが取得できる。
④そして取得したインデックスの値を【r2】に追加している。
##わかったこと
もっとループと条件分岐について理解する必要があるということ。