ここでの問題は、while ループが必要なことではなく、python for ループを適切に使用する必要があることです。for ループにより、コレクション (コードの場合は整数のシーケンス) の反復が発生します。
for n, val in enumerate(mylist):
if val < 0: negativeindices.append(n)
enumerate
の形式のペアのシーケンスを生成するビルトイン(index, value)
です。
以下を使用して、機能的なスタイルでこれを実行することもできます。
[n for n, val in enumerate(mylist) if val < 0]
これは、この種のタスクに対するより一般的な Python のイディオムです。明示的な関数を作成する必要さえないという利点があるため、このロジックはインラインのままにすることができます。
これを while ループで行うことを主張する場合は、Python の反復機能を利用するものを次に示します (これは基本的に上記の手動バージョンであることに注意してください。 for ループは for です):
data = enumerate(list)
try:
while True:
n, val = next(data)
if val < 0: negativeindices.append(n)
except StopIteration:
return negativeindices