1

Python の文字列と「ルール」の辞書、または文字列の変更の可能性があります。たとえば、1 つのルールが のキー'he'と の値'e'、または のキー'll'と の値を持つ場合があり'l'ます。

これらのルールは、文字列内の 'he' の出現箇所を , に置き換えることができることを意味し'e'、 および も同様'll''l'.

私が望むのは、この規則の辞書を考慮して、文字列のすべてのバリエーションを見つけることです。たとえば、上記の 2 つのルールと string'hello'を使用して、次のように返します。

['hello', 'ello', 'helo', 'elo']

どんな助けでも大歓迎です、ありがとう!

4

1 に答える 1

4

入力の部分文字列を取る再帰関数を書きます。次に、この関数はすべてのルールを調べます。一致するルールごとに、1 つの置換が行われ、残りの文字列が再帰呼び出しによって処理されます。

def apply_rules(rules, input, start=0):
    # First yield the outcome of no applied rules.
    yield input[start:]

    for match, replace in rules:
        # Find the first match for this rule.
        index = input.find(match, start)
        if index < 0:
            # No match -- skip to next one
            continue
        # Prepare the result of the replacement.
        prefix = input[start:index] + replace
        # Apply further rules to the rest of the string
        # by a recursive call.
        for suffix in apply_rules(rules, input, index + len(match)):
            yield prefix + suffix

次のように使用します。

>>> rules = [('he','e'), ('ll','l'), ('e','ee')]
>>> list(apply_rules(rules, 'hello'))
['hello', 'ello', 'elo', 'helo', 'heello', 'heelo']

この質問へのコメントで示されているように、無限の結果が発生するのを防ぐために、置換された文字列にルールを適用することは許可しないことに注意してください。

于 2015-05-10T17:15:37.827 に答える