LoginSignup
0
0

More than 3 years have passed since last update.

【python】一次元配列のリストと二次元配列のリストを比較して、一致した値のみ抽出する方法3つ【json】

Last updated at Posted at 2020-05-17

概要

表題の通り。
一次元配列のリスト(A)にある値が二次元配列のリスト(B)の【ID】列に存在するとき、Bの【name】列の値を取得する方法。
上記はslackのapiで遊んでいたときに分かったことで、それを以下にまとめた。

A.list
print(name_list)
['U012JDYRD2T', 'U012X478FNZ']
B.list #見やすいように修正しています。
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']]
期待する結果.py
print(result)
['test_1','kita']

方法1

1.py
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

1.py
result = []
result = [data_id[0] for data_id in data if data_id[1] in name_list]

理屈としては方法1と同じ。スマート。

方法3

3.py
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】に追加している。

わかったこと

 もっとループと条件分岐について理解する必要があるということ。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0