2017-11-25 1 views
0

2つ以上の重複した文字の実際のインデックスをリストに保存します。そのため私はindex()を使用しましたが、すべての重複文字の同じインデックスを返します。 この問題の解決方法は他にあります。文字列に2つ以上の重複した文字のインデックスを取得するにはどうすればよいですか?

+0

あなたがしようとしたコードを投稿してください。 –

+0

ようこそStackOverflowへ。この記事を読む時間を取って、[最小で完全で検証可能な例](http://stackoverflow.com/help/mcve)を提供し、それに従ってあなたの質問を改訂する方法をお読みください。良い質問をする方法(http://stackoverflow.com/help/how-to-ask)も役立つかもしれません。 – jezrael

+2

[python - 文字列内の文字を見つける - すべてのインデックスを取得できますか?](https://stackoverflow.com/questions/11122291/python-find-char-in-string-can-i-get-all-インデックス) – Mureinik

答えて

3

次のように私たちのリストと私たちの目的の要素が定義されてみましょう:

my_list = [1, 3, 2, 4, 3, 3, 5, 3] 
desired_element = 3 

次に、あなたは、Python、enumerate()の素敵なビルトインを使用することができます。

indexes = [index for index, element in enumerate(my_list) if element == desired_element] 
print(indexes) 

期待通りに出力されました[1, 4, 5, 7]


あるいは、よりよい形式で:

def indexes(my_list, desired_element): 
    return [index for index, element in enumerate(my_list) if element == desired_element] 

そしてちょうどindexes(list, element)を使用してそれを呼び出します。


あなたは効率を探しているなら(私はあなたが疑う):大規模なリストについては

def indexes2(my_list, desired_element): 
    for index, element in enumerate(my_list): 
     if element == desired_element: 
      yield index 

を(私がテストした限り)、これは4-5倍高速。これはジェネレータを返します。結果を可視化するには、list(...)を使用してリストに変換する必要があります。

0

パンダを使用して、これをpdシリーズに読み込んで、一度にいくつかの操作を行うことができます。

import pandas as pd 

l = ['a','b','c','a','b'] 

d = (pd.Series(l)[pd.Series(l).duplicated(keep=False)] 
    .reset_index() 
    .groupby(0)['index'] 
    .apply(list) 
    .to_dict()) 

d 

戻り値:

{'a': [0, 3], 'b': [1, 4]} 

またはこの:

d = (pd.Series(l) 
    .reset_index() 
    .groupby(0)['index'] 
    .apply(lambda x: list(x) if len(list(x)) > 1 else None) 
    .dropna() 
    .to_dict())