【发布时间】:2020-02-24 03:09:39
【问题描述】:
编辑:寻找匹配的数量而不是匹配本身。无法用集合或[x for x in list1 if x in list2] 类型的方式解决。 list1.count(x) if x in list2 虽然有效。
假设您有两个列表,list1 和 list2,并且想要查找 list1 中的值与 list2 中的值匹配的次数。
我使用下面的代码成功地执行了这个任务 -
sum([x==y for x in list1 for y in list2])
问题是这段代码不能有效地处理更大的列表。有没有比“double for”循环更快、更高效、更pythonic的方式来解决这个问题?
【问题讨论】:
-
查看设置交集
-
只要
list1和list2都没有重复元素,len(set(list1) & set(list2))就可以工作 -
list有一个count方法,它比您的 0/1 循环更有效,但您的查询仍然是 O(n^2)。所以sum(list1.count(x) for x in list2)会更快,但扩展性仍然很差。 -
@slurrr 你的预期结果是 num_dups([1,1], [1, 1]) 2 还是 4?
-
@AdamVanProoyen 4
标签: python arrays list sorting matching