[英]Python: Comparing Two lists
我正在嘗試使用Python比較這兩個列表:
comp1 = [['set',1,2]]
comp2 = [['set',2,1]]
兩者都是集合{1,2}的有效表示形式
我本質上是想檢查這些列表,comp1和comp2是否彼此相等,但是我不確定如何在Python中執行此操作。
我也有興趣找出如何使用類似列表的方法:
comp3 = [['set',1,2],['set',3,4]]
comp4 = [['set',2,1],['set',4,3]]
comp3 = [set(L[1:]) for L in comp3]
comp4 = [set(L[1:]) for L in comp4]
comp3 == comp4 # this should do the trick
只是為了好玩,如果您希望通過第一個字符串來推斷類型。 您可以從__builtin__
模塊中提取它。
def typify(seq):
seq = iter(seq)
typestr = next(seq)
return getattr(__builtin__, typestr)(seq)
comp3 = list(map(typify, comp3))
該函數采用第一個參數,從__builtin__
模塊中找到等效類型,並將其應用於序列的其余部分。 然后,我們可以將此功能map
到列表comp3的所有子元素上。 在python2上, map
將返回一個列表,而在python3中,您將必須進行顯式轉換,否則它將為您留下一個生成器。
這足夠通用,因此如果您傳遞其他類型,它將自動識別它:
comp3 = [['list',1,2],['set',3,4]]
list(map(typify, comp3))
#[[1, 2], {3, 4}]
之后,你可以做
comp3 = [['set',1,2],['set',3,4]]
comp4 = [['set',2,1],['set',4,3]]
comp3 = list(map(typify, comp3))
comp4 = list(map(typify, comp4))
comp3 == comp4
那么這種方法呢(使用itertools.chain
):
>>> comp3 = [['set',1,2],['set',3,4]]
>>> comp4 = [['set',2,1],['set',4,3]]
>>> from itertools import chain
>>> print set(chain(*comp3))
set([3, 1, 2, 'set', 4])
>>> set(chain(*comp3)) == set(chain(*comp4))
True
>>>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.