Python 3:即使元素不符合,我如何检查两个列表是否匹配

时间:2017-02-18 20:03:03

标签: python list sorting

我有两个清单:

original_list= [1,2,3,4,5]

new_list = [[1,7,3,4], [1,2,4,5,3]]

除了使用sort然后在列表中列出之外,我如何比较new_list中的original_list值?

3 个答案:

答案 0 :(得分:3)

您希望对list中的每个new_list进行排序,而不是new_list本身。例如,使用map

尝试此操作
print(sorted(original_list) in map(sorted, new_list))

或者如果您只关心相同元素的存在,无论其数量如何:

print(set(original_list) in map(set, new_list))

答案 1 :(得分:2)

假设您的原始列表已经排序(如果没有,只需应用sort),您必须比较每个元素 - 排序 - 使用循环或any

new_list = [[1,7,3,4],[1,2,4,5,3]]
original_list= [1,2,3,4,5]
original_list.sort()  # optional if the list is not sorted yet

print(any(sorted(x)==original_list for x in new_list))
如果True的子列表与new_list具有相同的元素,则

打印original_list

这样可以避免使用new_list = [sorted(x) for x in new_list]重建原始列表来获取已排序的项目,因为订单可能很重要。

答案 2 :(得分:0)

除了sorted具有O(n*log(n))运行时行为(我认为最糟糕的情况)之外,您可以使用collections.Counter(几乎保证O(n)运行时行为):

>>> from collections import Counter
>>> lst_counts = Counter(original_list)
>>> any(lst_counts == Counter(sublist) for sublist in new_list)
True

使用Counter比较键和值的事实,因此只有字典(在Counter内)相同时才相等

如果您可以排除重复项,那么您也可以使用Counter而不是set