2017-12-05 2 views
1

Angenommen, ich habe eine Zeichenfolge wie diese.Generieren Sie alle Möglichkeiten für eine Zeichenfolge, wo einige Buchstaben Zahlen sein können, in Python

sentence = "i like to go fishing on saturday" 

Und einige Buchstaben können Zahlen sein, in der Tradition von '1337' sprechen heißt h3110, h0w 4R3 y0u?

Allerdings möchte ich alle möglichen Kombinationen erhalten, wo einige Buchstaben in Zahlen umgewandelt werden, andere nicht. Einige Beispiele mit dem obigen Satz.

"i 1ik3 70 g0 fishing 0n s4turd4y" 
"i lik3 70 g0 fishing 0n s4turd4y" 
"i like 70 g0 fishing 0n s4turd4y" 
"i 1ike 70 g0 fishing 0n s4turd4y" 
etc. 

Wie könnte ich in Python ein Wörterbuch von Ersetzungen für jeden Buchstaben zu schreiben und dann eine Möglichkeit, alle möglichen Kombinationen für den Satz zu generieren?

+0

Ich habe das Gefühl, dass Sie durch die Menge der Kombinationen, die für diese Art von Problem existieren, weg sein werden. Die meisten Leute sind ... – Shadow

+0

Wo ist Ihr Python-Wörterbuch, das den Buchstaben zu Zahlenersetzungen zeigt? Zeig es wenigstens, und vielleicht können wir dir mit dem zweiten Teil helfen. – RoadRunner

+0

@ alfasin Ich hoffe, dir gefällt mein sarkastischer Kommentar ebenso wie deine bevormundende Bemerkung! @ Shadow Mit dem eigentlichen Satz, den ich verwenden wollte, und den Ersetzungen, die ich erlaube, waren es 1280 Kombinationen. @RoadRunner Ich wollte nicht angeben, wie ich die Substitutionen implementieren würde, da dies die Antwort von jemandem künstlich einschränken könnte. Zum Beispiel, wie es in der akzeptierten Antwort von Paul Panzer gemacht wurde, hätte ich mir nie vorgestellt. Allerdings wäre mein Weg so etwas gewesen: {'a': ['4'], 'i': ['!', '1'], 'l': ['1']}. Pauls ist viel klarer. –

Antwort

2

können Sie das Wörterbuch aus Paaren bauen und itertools.product dann für alle Kombinationen verwenden:

import itertools 

# 1: write down pairs 
pairs = ['a4', 't7', 'e3'] # etc. 
# 2: make dict; it will be convenient to store both letter and substitute as value 
pd = {p[0]:p for p in pairs} 
# 3: replace all eligible letters with the appropriate pair and 
# use itertools.product 
[''.join(c) for c in itertools.product(*(pd.get(i, i) for i in 'i like to go fishing on saturday'))] 
# ['i like to go fishing on saturday', 'i like to go fishing on saturd4y', 
# 'i like to go fishing on sa7urday', 'i like to go fishing on sa7urd4y', 
# 'i like to go fishing on s4turday', 'i like to go fishing on s4turd4y', 
# 'i like to go fishing on s47urday', 'i like to go fishing on s47urd4y', 
# 'i like 7o go fishing on saturday', 'i like 7o go fishing on saturd4y', 
# 'i like 7o go fishing on sa7urday', 'i like 7o go fishing on 
# ... 
+0

Das ist perfekt, danke. Ich wusste nichts über die Produktfunktion in iertools. –

1

Schreiben Sie eine Liste von Substitutionen, wie

[ 
    [1, 'l'], 
    [3, 'e'], 
    [4, 'a'], 
    ... 
] 

Als nächstes teilen Sie Ihren Text in einzelne Abschnitte, jeden Buchstaben zu trennen, die Sie ersetzen können. Zum Beispiel: „Angeln am Samstag“ werden

[ "fishing ", "o", "n s", "a", "turd", "a", "y"] 

Nun bringt in den Vertretungslisten für alle entsprechenden Buchstaben: o a a in diesem Fall. Verwenden Sie itertools.product, um alle möglichen Kombinationen zu generieren.

Ist das genug, um Sie zu beginnen? Die Durchführung bleibt dem Schüler als Übung überlassen.

1

Sie ein Wörterbuch manuell erstellen können. Aber bekommen alle Kombinationen mit itertools.combinations

from itertools import combinations 

sentence = "i like to go fishing on saturday" 

d = {'l' : '1', 
    'e' : '3', 
    't' : '7'} 

for l in range(len(d)): 
    for x in combinations(d, l): 
     for k in x: 
      s = sentence.replace(k, d[k]) 
      print(s) 

Aber diese Version ersetzt alle t-7. Nicht allen Anforderungen entsprechen.

Verwandte Themen