Ich laufe durch einen String, erstelle alle Teilstrings der Größe 10 und füge sie einem Diktat hinzu. Dies ist mein Code,
sequence_map = {}
for i in range(len(s)):
sub = s[i:i+10]
if sub in sequence_map:
sequence_map[sub] += 1
else:
sequence_map[sub] = 1
Gibt es eine Möglichkeit, dies pythonischer zu machen?
Wie mache ich das auch pythonisch, indem ich durch das Diktat intergiere und eine Liste schreibe, deren Wert etwas entspricht?
[k for k, v in sequence_map.items()]
Antworten:
3 für die Antwort № 1Sie können ein defaultdict
was "intelligent" genug ist, um fehlende Schlüssel nach Bedarf hinzuzufügen:
from collections import defaultdict
sequence_map = defaultdict(int)
for i in range(len(s) - 10):
sub = s[i:i + 10]
sequence_map[sub] += 1
Suchen Sie für den zweiten Teil Ihrer Frage das?
[k for k, v in sequence_map.items() if v==something]
2 für die Antwort № 2
Nur zur Vollständigkeit, wie @ juanpa.arrivillaga in den Kommentaren gesagt hat, können Sie verwenden collections.Counter
um dies einfach zu machen:
>>> from collections import Counter
>>> s = "abcde" * 30 # test value
>>> sequence_map = Counter(s[i:i + 10] for i in range(len(s) - 9))
>>> sequence_map
Counter({"abcdeabcde": 29, "bcdeabcdea": 28, "cdeabcdeab": 28, "deabcdeabc": 28, "eabcdeabcd": 28})