-1

次のコードがあり、すべての1のインデックス位置が必要です。

mylist = ['0', '0', '1', '1', '0']

for item in mylist:
    if item is '1':
        print mylist.index(item)

このプログラムの出力が2、3ではなく2、2である理由を誰かが説明できますか?

ありがとうございました

4

2 に答える 2

6

python builtin enumerateは、インデックスと要素のタプルを返します。列挙されたタプルを反復処理し、検索条件に一致する要素のみをフィルタリングする必要があります

>>> mylist = ['0', '0', '1', '1', '0']
>>> [i for i,e in enumerate(mylist) if e == '1']
[2, 3]

コードに戻ります。あなたが理解する必要がある3つの問題があります

  1. Pythonリストメソッドインデックスは、干し草の中で最初に出現した針の位置を返します。したがって、mylistで「1」を検索すると常に2が返されます。前のインデックスをキャッシュして、後続の検索に使用する必要があります
  2. インデントが正しくないため、印刷物をifブロック内に配置する必要があります
  3. の使用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
于 2012-12-11T18:26:09.447 に答える
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
于 2012-12-11T18:27:14.207 に答える