我有两个清单:
original_list= [1,2,3,4,5]
new_list = [[1,7,3,4], [1,2,4,5,3]]
除了使用sort然后在列表中列出之外,我如何比较new_list中的original_list值?
答案 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
。