2016-11-12 9 views
0
main_list = ['4', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] 
my_list = ['4', '5', '6'] 

私の質問は、main_listのmy_listのインデックスを見つける方法です。リストの最初の要素のインデックスを別のリストに見つける

my_listの整数は、main_listで連続している必要があります。

私はmain_list.index(my_list[0])を使ってみましたが、特定の要素が複数ある場合は、間違ったインデックス番号を返します。私が得なければならない結果は4ですが、main_list.index(my_list[0])とすると、インデックスとして0が与えられます。

明確化が必要な場合は、追加の詳細で投稿を編集できます。申し訳ありませんが、英語は私の母国語ではありません。

+0

'' 'main_list'''の3つのアイテムスライスを繰り返し、それらを' 'my_list'''と比較してください。 – wwii

答えて

2

これは行くことができるすべての可能なタイプのために働く必要があり、この

for i in range(len(main_list)-len(my_list)): 
    if main_list[i:i+len(my_list)] == my_list: 
     index = i 
     break 

のようなものを試してみてくださいリストに

+0

インデックスが見つからない場合は、インデックスを 'index = -1'として宣言する必要があります。 –

1

join() functionを使用して両方のリストを文字列に変換し、文字列を繰り返し比較して一致するものを見つけることができます。

EDIT:複数桁の数字に対して2つの変更を加えました。フロートケースも追加しました。例えば

main_list = ['4', '1', '2', '3', '40.1', '52', '61', '7', '8', '9', '10'] 
my_list = ['40.1', '52', '61'] 
index = -1 

for i in range(len(main_list)): 
    if '#'.join(main_list[i:i+len(my_list)]) == '#'.join(my_list): 
     index = i 
     break 

print(index) 
+0

ありがとう。それはこの問題を解決する素晴らしい方法です。 – karleh

+0

これがうまくいく場合は、回答としてマークしてください。ありがとう! –

+0

リストに浮動小数点数がある場合はどうなりますか?それから別の方法が必ず使用される必要がありますか? – karleh

0

あなたは、アルゴリズムのソリューションをご希望の場合:

def Find(haystack, needle): 
    n, h = len(needle), len(haystack) 
    assert n <= h 

    for i in range(h): 
     if h - i <= n: break 
     count = 0 
     for i_, j in zip(range(i, i + n), range(n)): 
      if haystack[i_] == needle[j]: 
       count += 1 
     if count == n: return i 

    return -1 
0

はるかに効果的な1つのライナー:

print ','.join(main_list).find(','.join(my_list)) - ''.join(main_list).find(''.join(my_list)) 

カンマで区切られた要素を持つ文字列に変換し、発生したことを発見し、その後、カンマがないときに見つかったの発生を減算し、あなたを持っています回答。

関連する問題