Python - Itertools Liste vergleichen?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

a generiert Dir im Endeffekt nacheinander die Kombinationen.

for comb in combinations(zeilen,2):
    fuzz.ratio(comb[0],comb[1])

Die Kombinationen werden als Tupel der Länge 2 generiert.


ThePeanutt 
Fragesteller
 13.03.2022, 16:30

Vielen Dank schonmal das hilft mir sehr. Kannst Du mir zufällig noch sagen, wie die Ausgabe anschließend aussehen könnte?

Mein Ziel wäre es, wenn die Strings einen ratio score unter bsp. 50 -> beide ausgeben und ratio score über 50 -> nur einen von beiden ausgeben, da diese ja sehr wahrscheinlich gleich sind.

Geht das irgendwie so in der Richtung?

0
KarlRanseierIII  13.03.2022, 21:05
@ThePeanutt

Ich kenne natürlich den Gesamtkontext nicht Du könntest ja einfach direkt ein IF in dem Beispiel oben einbauen.

Vielleicht könntest Du auch sowas machen:

(print (comb[0]) if fuzz.ratio(comb[0],comb[1])>50 else print(comb[0],comb[1]) for comb in itertools.combinations(zeilen,2))

Das wäre jetzt als Generatorausdruck.

Oder eben:

for comb in itetools.combinations(zeilen,2):
    print(comb[0]) if fuzz.ratio(*comb)>50 else print(comb[0],comb[1])

*comb ist dabei ein Unpackign des Tuples, anstatt einer expliziten Inidzierung.

Es gibt sicher noch mehr Wege ;-).

1
ThePeanutt 
Fragesteller
 13.03.2022, 22:38
@KarlRanseierIII

Du hast mir bei der ganzen Sache wirklich unglaublich geholfen. Vielen vielen Dank!!

0
ThePeanutt 
Fragesteller
 15.03.2022, 15:46
@KarlRanseierIII

Hallo nochmal, habe jetzt mal so einiges probiert und es klappt auch wirklich super. Allerdings würde ich gerne eine solche Abfrage mit dem Vergleich meiner Liste einbauen, sodass alle Kombinationen mit einem ratio score über 50 in einer Gruppe gesammelt werden.

Jetzt aktuell gebe ich ja nur eine Zeile aus, wenn der score über 50 liegt, ansonsten beide.

Im Idealfall möchte ich aber gerne am Ende alle ähnlichen Nachrichten (ratio>50) in Gruppen ausgeben bzw. das man sich jede Zeile nimmt, alle andere damit vergleicht und wenn der Score über 50 ist in eine Gruppe gepackt wird, die dann ausgegeben werden kann.

Hättest du da zufällig auch einen Weg für? :D

0
KarlRanseierIII  15.03.2022, 15:52
@ThePeanutt

Du könntest Dir eine Teilliste bauen, indem Du eien Listcomprehension nutzt

result=[comb for comb in combinations(...) if <cond>]

Als Bedingung gibst Du eben Dein Kriterium an und erhälst so eine gefilterte Liste aus Tupeln.

1