Wenn Sie nicht Python 2.6 oder höher, ist die Alternative eine explizite for-Schleife zu schreiben:
def set_list_intersection(set_list):
if not set_list:
return set()
result = set_list[0]
for s in set_list[1:]:
result &= s
return result
set_list = [set([1, 2]), set([1, 3]), set([1, 4])]
print set_list_intersection(set_list)
# Output: set([1])
Sie auch reduce
verwenden können:
set_list = [set([1, 2]), set([1, 3]), set([1, 4])]
print reduce(lambda s1, s2: s1 & s2, set_list)
# Output: set([1])
jedoch viele Python-Programmierer nicht mögen es, :
Vor etwa 12 Jahren, Python erwarb Lambda, reduzieren(), fil ter() und map() mit freundlicher Genehmigung von (glaube ich) einem Lisp-Hacker, der sie vermisste und Arbeitsflicken einreichte. Aber, trotz der PR-Wert, denke ich, diese Funktionen sollten von Python 3000 geschnitten werden.
So jetzt reduzieren(). Das ist eigentlich das, was ich immer am meisten gehasst habe, denn abgesehen von ein paar Beispielen mit + oder * muss ich fast jedes Mal, wenn ich einen reduce() -Aufruf mit einem nicht-trivialen Funktionsargument sehe, Stift und Papier greifen Diagramm, was tatsächlich in diese Funktion eingegeben wird, bevor ich verstehe, was die reduce() tun soll. In meinen Augen ist die Anwendbarkeit von reduce() ziemlich stark auf assoziative Operatoren beschränkt, und in allen anderen Fällen ist es besser, die Akkumulationsschleife explizit auszugeben.
Kannst du mir bitte erklären oder auf die relevante Dokumentation verweisen für was "* setlist" hier bedeutet? (Genauer gesagt, was macht der Stern?) Danke! – PurpleVermont
Für jeden anderen, der die gleiche Frage wie ich haben könnte, fand ich die Antwort hier: http://StackOverflow.com/Questions/400739/what-does-asterisk-mean-in-python – PurpleVermont