Ich habe eine Liste von Sets:
setlist = [s1,s2,s3...]
Ich möchte s1 ∩ s2 ∩ s3 ...
Ich kann eine Funktion schreiben, um dies zu tun, indem ich eine Reihe von paarweisen s1.intersection(s2)
usw. ausführe .
Gibt es eine empfohlene, bessere oder integrierte Methode?
quelle
reduce
sei "auf assoziative Operatoren beschränkt", was in diesem Fall anwendbar ist.reduce
ist sehr oft schwer herauszufinden, aber für&
ist nicht so schlimm.set_list and reduce(set.intersection, set_list)
result
leer ist.Hier biete ich eine generische Funktion für Kreuzungen mit mehreren Mengen an, um die beste verfügbare Methode zu nutzen:
Guido mag es vielleicht nicht
reduce
, aber ich mag es irgendwie :)quelle
sets
anstatt zu versuchen, auf die zuzugreifensets[0]
und sie zu fangenIndexError
.a_set
wird bei der endgültigen Rückgabe verwendet.return reduce(sets[0], sets[1:]) if sets else set()
?try
/except
vermieden werden sollte, wenn Sie können. Es ist ein Code-Geruch, ist ineffizient und kann andere Probleme verbergen.Die Antwort von Jean-François Fabre set.intesection (* list_of_sets) ist definitiv die pyhtonischste und zu Recht die akzeptierte Antwort.
Für diejenigen, die Reduce verwenden möchten, funktioniert auch Folgendes:
reduce(set.intersection, list_of_sets)
quelle