/ / Idiomatic Python Iteration und Hinzufügen zu einem Diktier - Python

Idiomatischer Python Iteration und Hinzufügen zu einem Diktier - Python

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 № 1

Sie 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})