/ / Python erstellt eine Vereinigung von Ergebnissen aus einer Funktion, die auf Elemente in einem Set angewendet wird - python, set, union

Python erzeugt eine Vereinigung von Ergebnissen aus einer Funktion, die auf Elemente in einem Set angewendet wird - python, set, union

Ich versuche, eine Menge zu erstellen, die alle Ergebnisse enthält, die von einer Funktion zurückgegeben werden, die auf jedes Element in einer Gruppe angewendet wird. Das folgende Code-Snippet verdeutlicht hoffentlich:

results = set()
for node in nodes:
results = set.union(results, foo(node))

Obwohl der Code erreicht, was ich will, bin ich sicher, dass es viel besser und prägnanter umgeschrieben werden kann. Da ich dieses Konstrukt mehrmals wiederholen muss, wird jede Hilfe sehr geschätzt.

Danke im Voraus.

Antworten:

3 für die Antwort № 1
results = set()
for node in nodes:
results.update(foo(node))

oder

results = set.union(*[foo(node) for node in nodes])

Ob nodes kann leer sein und dann verwenden, um sicherzustellen, dass keine Ausnahme ausgelöst wird:

results = set.union(set(), *[foo(node) for node in nodes])

0 für die Antwort № 2

Ich denke deine Lösung ist in Ordnung, außer du kannst es benutzen |= Operator für Vereinigungsmenge:

results = set()
for node in nodes:
results |= set(foo(node))

Oder Sie können alle Ergebnisse in einer Liste zusammenfassen und sie am Ende einmal setzen, wenn Sie keine großen Datenmengen erwarten.


0 für die Antwort № 3

vielleicht benutzen reduce

results = reduce(lambda x,y: set.union(x,y), [foo(x) for x in nodes])