2016-08-24 112 views
0

是否有任何有效的方式來比較集合與列表的集合。目前我只是遍歷集合列表並將列表中的每個元素與特定集合進行比較。 例如:set1=Set([1,2,5]) and lst1=[Set([1,2,3,4,5]),Set([10,11,12]),Set([7,8,9])]現在我必須比較set1與列表lst1中的每一組。現在,如果我得到set1-st==0其中st是一套lst1我將打破循環,但將繼續當set1-st!=0。 是否有任何有效的方式來做這種比較,或者我們必須以舊的方式做到這一點(迭代列表並與給定的集合進行比較)。有效的方法來比較一組集合在Python中的集合列表

+0

你善用'Set'那裏。你是否在使用'sets.Set'類的'sets'模塊?這是不贊成的;你應該使用內建的'set'類型。 – user2357112

+0

我正在使用'set' .. – djtama

回答

0

在這種情況下,您可以使用all()內置函數:

>>> set1=set([1,2,5]) 
>>> lst1=[set([1,2,3,4,5]),set([10,11,12]),set([7,8,9])] 
>>> 
>>> all(set1-i for i in lst1) 
False 
>>> 
>>> all(i-set1 for i in lst1) 
True 

或者根據你的情況,你可以建立一套統一使用set.union()您的清單,然後做你的設置和新的操作:

>>> set().union(*lst1) 
{1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12} 
+0

在我的情況下,執行'union'不是一個選項。並且在''all'()'在我現在正在做的背景中做同樣的事情(迭代列表並與給定集合進行比較)。 – djtama

+0

@djtama這裏有兩件事情,如果您必須與所有項目進行比較,除了在列表中循環以外無法進行其他操作,否則您可能可以對列表項目執行一些操作並將其轉換爲一個或多個設置爲了減少循環次數。還要注意'all()'接受一個生成器表達式並且比常規循環執行得更好。 – Kasramvd