Python-Listenschnittpunkt mit nicht eindeutigen Elementen

8

Ich habe zwei Zeichenfolgen und möchte die Schnittmenge auf ihnen haben einschließlich doppelte Elemente:

%Vor%

Ich möchte es zurückgeben:

%Vor%

Irgendwelche Ideen?

    
RickyA 03.09.2012, 19:56
quelle

2 Antworten

12

Multisets werden in Python 2.7 oder höher als (veränderbare) Counter -Objekte implementiert. Sie können viele der gleichen Operationen wie für Sätze ausführen, wie Vereinigung, Schnittpunkt, Differenz (obwohl die Anzahl negativ werden kann), usw.:

%Vor%

Lösung:

%Vor%

Weitere Details:

%Vor%

Sie können ''.join verwenden, wenn Sie eine Zeichenfolge möchten, oder list() , wenn Sie eine Liste möchten, obwohl ich sie nur im iterativen Format als intersection.elements() beibehalten würde.

    
ninjagecko 03.09.2012, 19:58
quelle
8

Verwenden Sie collections.Counter für jedes Wort und verwenden Sie diese als Mengen:

%Vor%

Die Counter ist eine dict Unterklasse, aber eine, die alle Elemente einer Sequenz zählt, mit der Sie sie initialisieren. Daher wird "aabbcc" zu Counter({'a': 2, 'b': 2, 'c': 2}) .

Counter verhalten sich wie Multisets. Wenn Sie 2 in einem Schnittpunkt wie oben verwenden, werden ihre Zählwerte auf die minimalen Werte in beiden Counters gesetzt, wobei nichts ignoriert wird, dessen Anzahl auf 0 fällt maximale Zählwerte werden stattdessen verwendet.

    
Martijn Pieters 03.09.2012 20:05
quelle

Tags und Links