我想創建一個集合,其中包含由應用於集合中每個元素的函數返回的所有結果。下面的代碼片段希望澄清:Python創建應用於集合中的元素的函數結果
results = set()
for node in nodes:
results = set.union(results, foo(node))
雖然代碼完成我想要的,我相信它可以改寫更好,更簡潔。因爲我不得不多次重複這個構造,所以任何幫助都非常感謝。
在此先感謝。
我想創建一個集合,其中包含由應用於集合中每個元素的函數返回的所有結果。下面的代碼片段希望澄清:Python創建應用於集合中的元素的函數結果
results = set()
for node in nodes:
results = set.union(results, foo(node))
雖然代碼完成我想要的,我相信它可以改寫更好,更簡潔。因爲我不得不多次重複這個構造,所以任何幫助都非常感謝。
在此先感謝。
results = set()
for node in nodes:
results.update(foo(node))
或
results = set.union(*[foo(node) for node in nodes])
如果nodes
可以是空的,然後用這個來確保它不會拋出異常:
results = set.union(set(), *[foo(node) for node in nodes])
我認爲您的解決方案是確定的,除了您可以使用|=
運營商設置聯盟:
results = set()
for node in nodes:
results |= set(foo(node))
或者你可以收集列表中的所有結果,並投它到底要設置一次(如果你不希望大量的數據)
你的第二個解決方案正是我正在尋找的,謝謝!雖然我知道set.union(* x),但我不知道是否以及如何首先應用函數時如何應用它。 – user1960897
+1爲第二個解決方案 – gefei
不應該是'set.union(set(),* [foo(node)...'? – georg