3

現在、私は巨大な文字列を調べているコードを持っています。次のように文字列を比較します。

a = 0
for letter in my_str:
    a += 1
    if letter <= my_str[a]:

「文字列インデックスが範囲外です」というエラーが発生する最後まで、比較を続けます。文字列の最後の文字を次の文字(存在しない)と比較しようとしているためだとわかります。これを修正する方法!私はすべてを試したような気がします。感謝します。

編集:私はちょうど私の解決策を理解したようです...とにかくありがとう。

4

4 に答える 4

2

itertoolsのペアワイズレシピを使用する

>>> from itertools import tee, izip
>>> def pairwise(iterable):
        "s -> (s0,s1), (s1,s2), (s2, s3), ..."
        a, b = tee(iterable)
        next(b, None)
        return izip(a, b)

>>> text = 'abc'
>>> for x, y in pairwise(text):
        if x <= y:
            pass
于 2012-07-16T04:33:19.773 に答える
2

文字列を反復処理するときに、インデックスを使用して文字列を操作することは避けてください。現在の文字を次の文字と比較する代わりに、現在の文字を、ループの最後のパスから保存した前の文字と比較します。ループの外側の「前の」変数を、最初のパスに適したものに初期化します。

lastletter = ""
for letter in text:
    if lastletter <= letter:   # always true for first char
        # do something
    lastletter = letter
于 2012-07-16T04:41:19.350 に答える
1

あなたがおそらく欲しいのは

for i in range(len(str)-1):
    if str[i] <= str[i+1]:
于 2012-07-16T04:34:15.627 に答える
-2

次のように、最初に別のifステートメントを追加しました。

if a < len(str):

それを理解するのになぜそんなに時間がかかったのかわからない!

于 2012-07-16T04:36:13.560 に答える