400 Stimmen

Wie findet man am besten die Schnittmenge von mehreren Mengen?

Ich habe eine Liste von Sets:

setlist = [s1,s2,s3...]

Ich möchte s1 s2 s3 ...

Ich kann eine Funktion schreiben, die dies durch eine Reihe von paarweisen s1.intersection(s2) , usw.

Gibt es einen empfohlenen, besseren oder eingebauten Weg?

3voto

tzot Punkte 86792

Hier biete ich eine allgemeine Funktion für die Schnittmenge mehrerer Mengen an und versuche, die beste verfügbare Methode zu nutzen:

def multiple_set_intersection(*sets):
    """Return multiple set intersection."""
    try:
        return set.intersection(*sets)
    except TypeError: # this is Python < 2.6 or no arguments
        pass

    try: a_set= sets[0]
    except IndexError: # no arguments
        return set() # return empty set

    return reduce(a_set.intersection, sets[1:])

Guido könnte missfallen reduce aber ich mag es irgendwie :)

3voto

Minas Punkte 11

Die Antwort von Jean-François Fabre set.intesection(*list_of_sets) ist definitiv die pythonischste und gilt zu Recht als die akzeptierte Antwort.

Für diejenigen, die "reduce" verwenden möchten, funktioniert auch Folgendes:

reduce(set.intersection, list_of_sets)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X