pythonのリスト内の重複要素検索

投稿者: Anonymous

python(2.7.10)で,list内の検索をする際

In[1]: a = [1,2,3,3,3,4,5]
In[2]: a.index(3)
Out[2]: 2

と最初のインデックスが返ってきます.
理想は[2,3,4]と全ての該当インデックスが欲しいのですが,簡単な書き方で取得できる方法はありませんか.

今のところ可能な限り要素を検索しつつ取得した場所を取り除き続けるという力技をしていますがもう少し簡潔でメモリに優しい方法はないでしょうか
(元のリストはそのままにしておきたいのでdeepcopyをしていますがメモリを食ってしまうようで大きいリストで大量に実行すると止まってしまいます…)

from copy import deepcopy
b = deepcopy(a)
ans = []
while True:
  try:   
    ans.append(b.index(3))
    b.pop(b.index(3))
  except:
    break

解決

単純にforで

ans = []
for index, value in enumerate(a):
    if value == 3:
        ans.append(index)

内包表記で

ans = [ i for i, v in enumerate(a) if v == 3]
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *