2017-08-30 11 views
-1

私が書いたコードは、xlookforを9に設定したときを除いて、すべての値に対して機能し、インデックスエラーを生成します。私はインデックスの境界(カウンタを0に変更する)と他のいくつかのものを変更することに戸惑ってしまったが、同じエラーで終わった。私はこれが単純なインデックス修正であることを知っていますが、わかりません。どんな助けもありがとう。forループ内のPython配列のインデックス

firstlist = [1, 3, 5, 6, 7, 8, 9] 
secondlist = [9, 3, 1, 8, 6, 9, 2] 
valuetolookfor = 6 

b = 0 
e = 0 
s = 0 
counter = 1 

    for i in firstlist: 
     counter += 1 
     if i <= valuetolookfor: 
      s = i-1 
      b = firstlist[counter] 
       if b >= valuetolookfor: 
       e = i 
       break 
+2

インデントを修正する必要があります。ひどくインデントされたPythonコードはナンセンスです。 – khelwood

+0

インデントに同意します。あなたの問題は、Python配列が要素0で始まるので、 'counter = 1'で始まると思います。私は' counter = 0'はあなたが始めるべき場所だと思います。あなたは配列の最初の要素をスキップしているので、そこに '9'を見つけることはできません:) – RobertB

+0

ありがとう皆さんのコメント。私はSolaxunによって与えられた助言を介して動作するようになった。すぐに投稿を更新します。 – user2845180

答えて

1

forループで複雑にする必要はありません。あなたは、単に問題ことができます。

xvals = [1, 3, 5, 6, 7, 8, 9] 
yvals = [9, 3, 1, 8, 6, 9, 2] 
xlookfor = 6 
yvals[xvals.index(xlookfor)] 
>> 8 
xlookfor = 9 
yvals[xvals.index(xlookfor)] 
>> 2 
+0

なぜ効果的なソリューションをdownvote? – AK47

1

あなたのソリューションでは、何をやっていることはあなたがあなたのケースでxvals、またはiで反復処理されている現在の値で、すべての回で、先にb 2つのステップを保っています。私はあなたがしたいことが一歩前進し続けることを前提としているので、インデックスのエラーの原因ではありませんが、それは問題番号1です。

bが9を表示すると、iが2ステップ前になるか、または7になります。その結果、0〜6の範囲外にあるyvalsの7番目の位置にアクセスしようとしていますPythonでのゼロベースのインデックス作成)。

これは、yvals [7]です。ループが終了するとeは7になるためです。

関連する問題