2016-04-19 7 views
-1

リストを反復処理して、次のコードを使用して:何らかの理由でPython 3.4のif文のループの同じイテレータを使用すると「リストインデックスをfloatにすることはできません」というエラーが発生する

for i in listy: 
    if (listy[i]<0):... 

を、Pythonは、リスト上の第一項目である、listy[0.5]<0を評価しようとします。これをどうすれば解決できますか?

+3

「i」はインデックスではなく、*値*です。 –

+2

python documentaion/tutorialで 'for'がどのように動作するかを確認してください。 – Lafexlos

答えて

1

iはインデックスではありません。 この行はあなたが望む通りではありません(listy[i]<0)。あなたはおそらくi<0

(listy[i]<0)を行うためのもの

はインデックスとして値を使用しようとしています。リストでは、値はインデックスとして使用できない浮動小数点数です。

あなたは本当にあなたが行うことができ、インデックスを使用する場合:Cおよび他の多くの言語では

for i in range(len(listy)): 
    if listy[i] < 0: 
     #do something 
+0

ありがとうございました!私はこれを修正するために何時間も頭を叩いていました。 さらに、私はCおよびC++で使用される整数として "i"を使用していました。 – Demis

+0

@Demis haha​​問題ありません:) –

1

を、それを反復処理するとき、あなたは多くの場合、配列の長さを使用します。これをPythonでも行うことができますが、インデックス(位置)を明示的に使用せずに要素を反復処理することもできます。あなたは2つのアプローチを混在させているようで、予期せぬ結果が得られます。

これは、値のみを反復します:

for i in listy: 
    # here, i is the value of the list entry 
    print(i) 

これは、リストの長さとインデックス(位置)を使用します:

for i in range(len(listy)): 
    # here, i is the index (position) of the list entry, not the value 
    print(listy[i]) 

これはあなたのインデックスと値の両方を提供します:

for i, val in enumerate(listy): 
    # here, i is the index (position) and val is the value 
    print(i, val) 
関連する問題