次のコードがあり、すべての1のインデックス位置が必要です。
mylist = ['0', '0', '1', '1', '0']
for item in mylist:
if item is '1':
print mylist.index(item)
このプログラムの出力が2、3ではなく2、2である理由を誰かが説明できますか?
ありがとうございました
python builtin enumerateは、インデックスと要素のタプルを返します。列挙されたタプルを反復処理し、検索条件に一致する要素のみをフィルタリングする必要があります
>>> mylist = ['0', '0', '1', '1', '0']
>>> [i for i,e in enumerate(mylist) if e == '1']
[2, 3]
コードに戻ります。あなたが理解する必要がある3つの問題があります
if
ブロック内に配置する必要がありますの使用is
が正しくありません。is
等しいかどうかはチェックしませんが、両方の要素が同じ参照を持っているかどうかを確認するだけです。この場合は機能しますが、避ける方がよいでしょう。
>>> index = 0
>>> for item in mylist:
if item == '1':
index = mylist.index(item, index + 1)
print index
2
3
最後に、列挙するときにインデックスの使用について心配する理由。
>>> for index, item in enumerate(mylist):
if item == '1':
print index
2
3
これは、配列にmylist.index(item)
最初に出現したインデックスを検索する関数だからです。item
つまりmylist.index('1')
、ループに入れなくても、インデックス2を呼び出してすぐに取得できます。
次のようなことをしたいとします。enumerateはループを通過しながらゼロベースのインデックスを開始します。
mylist = ['0', '0', '1', '1', '0']
for i,item in enumerate(mylist):
if item == '1':
print i