リストを反復処理して、次のコードを使用して:何らかの理由でPython 3.4のif文のループの同じイテレータを使用すると「リストインデックスをfloatにすることはできません」というエラーが発生する
for i in listy:
if (listy[i]<0):...
を、Pythonは、リスト上の第一項目である、listy[0.5]<0
を評価しようとします。これをどうすれば解決できますか?
リストを反復処理して、次のコードを使用して:何らかの理由でPython 3.4のif文のループの同じイテレータを使用すると「リストインデックスをfloatにすることはできません」というエラーが発生する
for i in listy:
if (listy[i]<0):...
を、Pythonは、リスト上の第一項目である、listy[0.5]<0
を評価しようとします。これをどうすれば解決できますか?
i
はインデックスではありません。 この行はあなたが望む通りではありません(listy[i]<0)
。あなたはおそらくi<0
(listy[i]<0)
を行うためのもの
はインデックスとして値を使用しようとしています。リストでは、値はインデックスとして使用できない浮動小数点数です。
あなたは本当にあなたが行うことができ、インデックスを使用する場合:Cおよび他の多くの言語では
for i in range(len(listy)):
if listy[i] < 0:
#do something
ありがとうございました!私はこれを修正するために何時間も頭を叩いていました。 さらに、私はCおよびC++で使用される整数として "i"を使用していました。 – Demis
@Demis haha問題ありません:) –
を、それを反復処理するとき、あなたは多くの場合、配列の長さを使用します。これを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)
「i」はインデックスではなく、*値*です。 –
python documentaion/tutorialで 'for'がどのように動作するかを確認してください。 – Lafexlos