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

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

只是为了好玩,如果你想让第一个字符串推断出类型。您可以从 __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 上会 return 一个列表,而在 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