编辑:寻找比赛的数量而不是比赛本身。无法使用集合或 [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 的方法来解决这个问题?
最佳答案
计数器通过 &
运算符支持多集交集:
>>> from collections import Counter
>>> list1 = list("abba")
>>> list2 = list("bbanana")
>>> c1 = Counter(list1)
>>> c2 = Counter(list2)
>>> sum(c1[k]*c2[k] for k in c1 & c2) # O(n)
10
>>> sum([x==y for x in list1 for y in list2]) # O(n**2)
10
关于python - 查找两个可迭代对象共享的匹配值数量的更有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58597916/