質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

4回答

2709閲覧

Python リスト要素を別のリスト要素で検索し、インデックスを返す

KK-31

総合スコア22

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2018/03/21 07:54

編集2018/03/21 07:58

質問内容

Python リスト要素を別のリスト要素で検索し、インデックスを返す方法について、質問させていただきます。

Python

1list1 = ["aaa","bbb","ccc","ddd","eee"] #インデックスを参照したいリスト配列 2list2 = ["aaa","ddd"] #検索キーとなる配列 3 4#list3 = ???? 5#list3 = [0,3]←を求めたい 6 7 8

この場合でのコーディングをどうすればよいか、ご教授いただけますと、幸いです。
試したこと

Python

1list3 = [i for (i,item) in enumerate(list1) if item == "aaa" or item == "ddd"]

こんな形になりそうな気がしますが、
抽象化したいときは、どうすればよいでしょうか・・・。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tachikoma

2018/03/21 08:09

質問1:list1にダブりがある可能性はありますか?
tachikoma

2018/03/21 08:10

質問2:list2の全ての要素は必ずlist1に含まれていると考えていいですか?
guest

回答4

0

list2に要素が2個以上あるのなら、list1を辞書に一度変換すべきです。

投稿2018/03/21 08:23

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2018/03/21 08:34

恥ずかしながら計算量の観点がすっぽり抜け落ちてました。
mkgrei

2018/03/21 14:52

コードが遅いと感じた時なんとかすれば良いという考え方もあるので、目的がそのままコーディングされている方がわかりやすさという利点があります。 辞書を作るとメモリが取られるので、環境によっては避ける選択肢も… pythonを使う時点でその可能性は薄いか…
guest

0

ベストアンサー

こんなのはいかが。

Python

1list1 = ["aaa","bbb","ccc","ddd","eee"] 2list2 = ["aaa","ddd"] 3 4list3 = [list1.index(elem) for elem in list2] 5print(list3) # [0, 3]

次の二点は注意が必要ですが。

  • 検索ワードがlist1に含まれないときに例外が投げられること
  • list1の要素が重複しているときに同じインデックスが複数回返される可能性があること

どう対処するかは要件に依ります。

投稿2018/03/21 08:02

編集2018/03/21 08:06
LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KK-31

2018/03/21 08:10

ありがとうございます。 解決しました。
guest

0

2重投稿になったので削除

投稿2018/03/21 09:45

編集2018/03/21 09:47
katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

python

1list(map(lambda x: list1.index(x) if x in list1 else None, list2))

実行例
イメージ説明

list1 に存在しない要素が list2 にある場合は None となるようにしてます。

list1 に重複した要素がある場合への対応案もあります。

python

1list(map(lambda x: [i for i, elem in enumerate(list1) if elem == x], list2))

実行例
イメージ説明

投稿2018/03/21 09:44

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問