2016-09-04 14 views
0

私が入力した番号がリストにあるかどうかをテストする関数(長いこと)を書いています。私は 'in'関数を使いたくありません。問題は、リストにある番号を入力するときにのみ機能し、番号がリストにないときには、if x == a[i]:という行にエラーが表示される理由です。Pythonでリストのメンバーを比較する

def is_member(x): 

    a = [1,5,3,9,4,100] 
    i = 0 
    found = False 

    while found == False: 
     if x == a[i]: 
      found = True 
      break 
     i += 1 
    if found == True: 
     return "True" 
    else: 
     return "False" 
+0

を試してみてください。だから 'x == a [i]'は、インデックスiが存在しないときに要素 'a [i]'のチェックも行います。 – karthikr

+0

あなたは "なぜエラーが出ますか?" "IndexError:リストインデックスが範囲外です"というエラーメッセージを読まなかったのですか? – eyquem

答えて

2

リストに要素がない場合、それはi = len(a)なるまで、そしてあなたのiはどんどん大きくなります。この時点でa[i]はをスローします。これはリストサイズを超えたためです。とにかくx == a[i]でループを破るので、while found == false:の代わりにwhile i < len(a):を使用するのが簡単な修正です。

1

if (i == len(a)-1): return Falseという条件を追加する必要があります。 インデックスはリストaの長さを超えることはできません。

2

これは、リストの範囲外にあるためです。

i > len(a)と返されるように小切手を追加する必要があります。

1
def is_member(x): 

    a = [1,5,3,9,4,100] 
    i = 0 
    found = False 

    while found == False: 
     if i >= len(a): 
      return False # end of list reached 
     if x == a[i]: 
      found = True 
      break 
     i += 1 
    if found == True: 
     return "True" 
    else: 
     return "False" 

リストの終わりを処理するために、コードの一部は、あなたがFoundのような別の変数は、あなたが以下の方法でそれを行うことができません実際に

を追加されました。

def is_member(x): 

    a = [1,5,3,9,4,100] 
    i = 0 

    while True: 
     if i >= len(a): 
      print 'test' 
      return False # end of list reached 
     if x == a[i]: 
      return True 
     i += 1 
1

代わりにこのような何かを試してみてください:

def is_member(x): 
    a = [1,5,3,9,4,100] 
    for i in a: 
     if i == x: 
      return "True" 
    return "False" 

をここでは上の反復、および任意のメンバー== xは、我々はすぐに「真」を返す場合。ループの最後までに戻ってこない場合、要素は存在しません。

2

ます。また、インデックスエラーを回避するために、forループを使用することができ、あなたはwhileループにあるとき、あなたはi` `のインデックスをチェックしていないためである。この

def is_member(x): 

a = [1,5,3,9,4,100] 

for i in range(len(a)): 
    if x == a[i]: 
     return True 
return False 
関連する問題