0

私は Python の完全な初心者で、この文字列のすべての「o」のインデックスを見つけようとしています。これは、最初の o のインデックスのみを表示しますが、それらすべてを見つけようとしています:

besedilo = "Dober dan Slovenija"
    print (besedilo.index("o"))

for ループを使用できると思ったが、その方法がよくわからない

4

2 に答える 2

2

使用enumerate():

>>> besedilo = "Dober dan Slovenija"
>>> [i for i, j in enumerate(besedilo) if j == 'o']
[1, 12]

これは、文字列と 0 から始まる一種のカウンターの両方をループします。文字が に一致する場合'o'、カウントはリスト内包表記によって返されるリストに含まれます。

itertoolsまたは、次のモジュールを使用できます。

>>> import itertools
>>> [i for i, j in itertools.izip(itertools.count(), besedilo) if j == 'o'] # itertools.izip not needed if you are using Python 3
[1, 12]

enumerate()それははるかに効率的であることを覚えておいてください:)。

于 2013-09-23T08:45:44.560 に答える
2

でリスト内包表記を使用しますenumerate()

indices = [i for i, c in enumerate(besedilo) if c == 'o']

デモ:

>>> besedilo = "Dober dan Slovenija"
>>> [i for i, c in enumerate(besedilo) if c == 'o']
[1, 12]

このstr.index()メソッドはオプションのstart引数として、検索する開始インデックス (デフォルトは 0) も取るので、最後の位置 + 1 でループを構築して、すべてのインデックスを収集できます

indices = []
next = -1
while True:
    try:
        next = besedilo.index(next + 1)
        indices.append(next)
    except ValueError:
        break

速度が問題になる場合は、実際にはこの最後の方法が 2 つのオプションの中で高速です。

$ bin/python -m timeit -s "test = 'Dober dan Slovenija'" "indices = [i for i, c in enumerate(test) if c=='o']" 
100000 loops, best of 3: 2.51 usec per loop
$ bin/python -m timeit -s "test = 'Dober dan Slovenija'" -s "indices,next=[],-1" "while True:" "    try:" "        next= test.index('o', next+1)" "        indices.append(next)" "    except ValueError: break"
1000000 loops, best of 3: 1.06 usec per loop
于 2013-09-23T08:45:54.500 に答える