2017-01-05 6 views
0

これは簡単で正しいと思うが、うまくいきません。python:ループしている文字列のリスト指定された要素のインデックスを見つけよう

目的:ループを使用して文字列のリストを検索し、検索語句を検索します。 最初の一致の要素番号を返します。

私はいくつかの選択肢を試しましたが、何も動作していないようだし、どのテキストでもそれを行う方法の実用的な説明をまだ見つけていません。

これが私の最高の試みは、これまでのところです:

def get_element_number(a_list, search_term): 
    for i in range(len(a_list)): 
     if search_term in a_list[i]: 
     return a_list.index(i) 
     elif not search_term in a_list: 
     return 'no match' 

エラーメッセージ:

Traceback (most recent call last): 
File "python", line 11, in <module> 
File "python", line 5, in get_element_number 
ValueError: 2 is not in list 

は完全な答えを探していない、私は間違って行くよどこにあるか、私は」の場合だけで任意のヘルプ何かが欠落していると非常に役に立ちます。

+0

関数呼び出しで行われたとして、あなたが 'a_list'と' search_term'のサンプルを提供することができますか? – Chuck

+0

ああ申し訳ありません! 私はリストの長さを受け入れることができるという仕事を見つけましたが、私は本当に助けと本当の答えに感謝します! – Megan

答えて

2

これをすべてindex = a_list.index(search_term)に置き換えることができます。

リストにsearch_termが含まれていない場合、例外がスローされるため、それをキャッチして「見つからない」などの情報を返す必要があります。 2番目の注釈:検索されたsearch_termの最初のインデックスのみを返します。

+1

私は例外のために何をすべきかを考え出しました(基本的に部品への挑戦を打ち破り、私ができることを解決し、机の上で少しでも頭を打ちました)。 ありがとうございました! – Megan

3

if search_term in a_list[i]:search_termが​​でをを含有させてもTrueです。

完全に一致する場合はindexですが、部分一致の場合はindexが例外をスローします。

脇:elif not search_term in a_list:が間違っています。それを削除するか、最初に不一致で戻ってきます。

としてそれを書き換え

:これは簡単です、あなたが(アカウントへの例外のオーバーヘッドを取っていないリニア検索を使用しているときに重要な性能面で一度だけ検索を実行することの利点を、持っている

def get_element_number(a_list, search_term): 
    try: 
      return a_list.index(search_term) 
    except IndexError: 
      'no match' 

)。

0
for index, s in enumerate(a_list): 
    if s == term: 
    return index 
return -1 
0
def get_element_number(a_list, search_term): 
    for index, value in enumerate(a_list): 
     if search_term in value: 
      return index 
    return 'not match' 
+0

私は列挙について読んでいましたが、少し違うと思っていました。ありがとうございました! – Megan

0

ここでそれを解決しますあなたのコードに簡単な変更です:

def get_element_number(a_list, search_term): 
    if search_term in a_list: #if search keyword is in the list 
     return a_list.index(search_term) #then return the index of that 
    else: 
     return 'no match!' 
関連する問題