簡體   English   中英

Python:比較兩個列表

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

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