Python:比较两个列表

时间:2016-03-16 19:38:10

标签: python list set compare

我试图用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]]

3 个答案:

答案 0 :(得分:2)

comp3 = [set(L[1:]) for L in comp3]
comp4 = [set(L[1:]) for L in comp4]

comp3 == comp4  # this should do the trick

答案 1 :(得分:2)

只是为了好玩,如果你想要第一个字符串推断出类型。你可以从__builtin__模块中选择它。

def typify(seq):
    seq = iter(seq)
    typestr = next(seq)
    return getattr(__builtin__, typestr)(seq)

comp3 = list(map(typify, comp3))

该函数接受第一个参数,从__builtin__模块中找到等效类型,将其应用于序列的其余部分。 然后,我们可以在列出comp3的所有子元素上map使用此函数。 在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

答案 2 :(得分:0)

这种方法怎么样(使用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
>>>