2016-05-23 6 views
0

特定のインデックス間でリストアイテムを検索する関数を作成する必要があります。特定のインデックスをPythonで検索する

リストの開始と終了のインデックスを持ちたいと思います。リスト内のアイテムの位置を探したいと思います。例えば

:単語 "8" は、リスト2のインデックス位置にあるため

def find(list, word, start=0, stop=-1): 
    print("In function find()") 

    for item in list: 
     if item == word: 
      return list[start:stop].index(word) 

n_list = ['one', 'five', 'three', 'eight', 'five', 'six', 'eight'] 
print(find(n_list, "eight", start=4, stop=7)) 

このコードは、[4:7]、 "2" を返します。

私の質問:「6」を返すようにこのコードを変更するにはどうすればよいですか?私が[4:7]を削除すると、 "8"という単語も[3]の位置にあるので、それは私に "3"を与えます。

編集:ありがとうございました!

+0

あなたはいつもあなたの単語の最後のインデックスを取得したいですか? –

+0

'list [start:stop]'のインデックスを呼び出しているので、関数は "2"を返します。 – Tanu

答えて

2

開始を追加することはできませんか?

def find(list, word, start=0, stop=-1): 
print("In function find()") 

for item in list: 
    if item == word: 
     return start + list[start:stop].index(word) 
+1

注: 'word'がリストにあり、スライスの外側にある場合、これは失敗します。 –

1

あなたはstartstopによって特徴づけられる範囲が信頼できると仮定した場合は、ワンライナーにそれを行うことができます。

n_list[start:stop].index(word)+start 
+0

要素がスライス内にない場合、これは 'ValueError'をスローします。そのため、' try/except'にこれをラップすることができます。そうでなければ罰金。 –

+0

@tobias_k 'if stop> len(list):return'はどうですか? – user2572329

0

forループが必要とされていません。

def find(list, word, start=0, stop=-1) 
    '''Find word in list[start:stop]''' 
    try: 
     return start + list[start:stop].index(word) 
    Except ValueError: 
     raise ValueError("%s was not found between indices %s and %s"%(word, start, stop)) 
関連する問題