簡體   English   中英

集合列表中的集合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM