在python中不按特定顺序比较两个列表

在python中不按特定顺序比较两个列表,python,list,Python,List,我有两个列表,如何比较te和inc inc=[['A', 'B'], ['C', 'D'], ['E', 'F'], ['G', 'H']] te=['A', 'B'] print te in inc # return True inc=[['A', 'B'], ['C', 'D'], ['E', 'F'], ['G', 'H']] te=['A', 'C', 'B'] print te in inc # return False 在这里稍微摩擦一下我的水晶球,您需要一个扁平的数据结构(一个

我有两个列表,如何比较
te
inc

inc=[['A', 'B'], ['C', 'D'], ['E', 'F'], ['G', 'H']]
te=['A', 'B']
print te in inc # return True

inc=[['A', 'B'], ['C', 'D'], ['E', 'F'], ['G', 'H']]
te=['A', 'C', 'B']
print te in inc # return False

在这里稍微摩擦一下我的水晶球,您需要一个扁平的数据结构(一个
集合
是理想的,因为您不关心顺序,只关心成员资格)和
全部

s_inc = set(c for sublist in inc for c in sublist)

s_inc
Out[7]: set(['H', 'G', 'F', 'E', 'D', 'C', 'B', 'A'])

te=['A', 'C', 'B']

all(c in s_inc for c in te)
Out[9]: True

不确定这是否正是您想要做的,但请尝试:

inc = [['A', 'B'], ['C', 'D'], ['E', 'F'], ['G', 'H']]
te = ['A', 'C', 'B']

def flatten(target):
    return_list = list()
    for element in target:
        if isinstance(element,list):
            return_list.extend(flatten(element))
        else:
            return_list.append(element)
    return return_list

set_inc = set(flatten(inc))
set_te = set(te)

print(set_te.issubset(set_inc)) # True

您只是想看看
te
中的所有内容是否也在
inc
中?通过
#return False
,您的意思是希望它返回False吗?或者你的意思是你希望它返回真的,但它返回假的,违背你的意愿?为了将来的参考,重要的是要更具体地说明你在追求什么。例如,如果要在
[[“A”,“B”],[“C”,“D”]
中查找
[“A”,“A”]
,则基于集合的答案将全部失败。你说你不关心顺序,但你没有说你是否关心多样性。重要的是,在发布之前要仔细考虑各种情况,并决定需要什么样的行为,否则人们必须猜测以填补空白。您可以在此处使用
set.issubset
方法(我认为是)更快地查找。还要注意,如果他的列表嵌套得比
inc
中的列表更深,这将抛出一个
TypeError:unhabable type:'list'
不,这不会更快。它还需要从
te
中构建一个中间
set
,这是一个列表;s_te.issubset(s_inc)比
all(c in s_inc代表c in te)快
。我使用timeit进行了分析。如果我们人为地增加
te
inc
的大小,差异只会变得更大:)
def test_union(te,inc):“用法:始终返回True”;返回True
完美!我不明白为什么我的答案被标为正确。我做了@roippi所做的一切,你把它标记为正确,然后把它换成了我的。这似乎没有道理。。。