[英]Set from a List of Sets
我正在使用Python。 我有一個很大的列表L = [X_{1}, X_{2}, ....,X_{n}]
,其中每個X_{i}
是一個集合。 對於某些不同的索引i, j
我們可能有X_{i} = X_{j}
。 我想創建一個列表(或集合) L_{1} = [Y_{1}, Y_{2}, ... ,Y_{k}]
,以使集合(從數學意義上) {X_{1},..., X_{n}} = {Y_{1}, ..., Y_{k}}
, L_{1}
的長度最小(換句話說, L_{1}
沒有重復) 。
對於后續應用程序,我需要訪問L_{1}
的元素。 所以我不能使用frozenset
選項。
使用set(L)
會給出錯誤TypeError: unhashable type: 'set'
。
我想我可以使用循環構造來解決它,但是我想知道Python中是否有更優雅的解決方案。
如果要消除重復集,則需要將它們轉換為frozenset()
實例:
unique_sets = {frozenset(s) for s in L}
或者,如果您使用的是Python 3:
unique_sets = set(map(frozenset, L))
如果您需要以可變集的列表結尾,則可以使用以下方法再次生成set()
對象的列表:
unique_set_list = [set(s) for s in unique_sets]
您可以將兩者合並為一個列表理解,但會損失一些可讀性:
seen = set()
unique_set_list = [ms for ms, ims in ((s, frozenset(s)) for s in L)
if not (ims in seen or seen.add(ims))]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.