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