Ich denke, was Sie wollen, ist eine Möglichkeit, Eimer zu erstellen. Basierend darauf empfehle ich collections.defaultdict
mit einem Initialisierer set
als "Eimer" (hängt davon ab, wofür Sie es verwenden). Hier
ist ein Beispiel:
#!/usr/bin/env python
from collections import defaultdict
from itertools import combinations
d = defaultdict(set)
strs = ["str", "abc", "rts"]
for s in strs:
d[hash(s)].add(s)
d[hash(''.join(reversed(s)))].add(s)
for combination in combinations(d.values(), r=2):
matches = combination[0] & combination[1]
if len(matches) > 1:
print matches
# output: set(['str', 'rts'])
Zwei Strings in den gleichen Eimer hier sind sehr wahrscheinlich die gleiche endet. Ich habe eine Hash-Kollision erstellt, indem ich die umgekehrte Funktion benutze und eine Zeichenfolge verwende, die als Werte umgekehrt ist.
Beachten Sie, dass das Set den vollständigen Vergleich verwendet, aber es sollte sehr schnell gehen.
Hash nicht zu viele Werte, ohne die Sätze zu leeren.
Hey, nette Formatierung! Ich wusste nicht, dass du einen Tag oder einen untergeordneten Text in einem Post verwenden kannst ... – linusg
Gleich bevor jemand mir @linusg beigebracht hat! Verwenden Sie [... tag: ... Python] ohne die Punkte und schließen Sie Text in Unter- und Sup-Tags ein, um das Ergebnis zu erhalten. Klicken Sie auf Bearbeiten auf meine Frage, um genau zu sehen, wie das gemacht wird! – gsamaras
Ich beschränkte die Frage @ReutSharabani. – gsamaras