a= [26,3,32,8,15,26] b= [32, 29, 8, 26, 3, 18]
a 中的 26 与 b 中的每个元素分别匹配一次,有相同的计数器 count+1
然后
a 中的 3 与 b 中的每个元素分别匹配一次,有相同的计数器 count+1
自己计算,a 与 b 里无素只有 4 个相同。 但结果是返回 5。因为它把 26 算了两次。
如果 a 和 b 里各有两个 26,计两次是对的,
可现在只有 a 里有两个 26,而 b 里有一个 26。
怎么解决。想了一些办法但都不好
![]() | 1 alixali 2018-10-30 21:35:13 +08:00 可以先把两个列表分别进行排序然后进行一次遍历,再分别进行计数。 |
![]() | 2 Trim21 2018-10-30 21:47:50 +08:00 先取一个 a 的 set, 然后判断每个元素在 a 和 b 中的数量, count 加上两个数量的最小值. |
![]() | 3 Nimrod 2018-10-30 22:07:08 +08:00 via Android 匹配一个删掉一个 |
4 princelai 2018-10-30 22:11:49 +08:00 ![]() In [1]: from collections import Counter In [2]: a = [26,3,32,8,15,26] In [3]: b = [32,29,8,26,3,18] In [4]: count_a = Counter(a) In [5]: count_b = Counter(b) In [6]: sum([min(count_a.get(k,0),count_b.get(k,0)) for k in count_a.keys()] ) Out[6]: 4 |
![]() | 5 rabbbit 2018-10-30 22:15:45 +08:00 |
![]() | 6 rabbbit 2018-10-30 22:30:54 +08:00 |
7 lovestudykid 2018-10-31 04:24:01 +08:00 sum([min(a.count(i),b.count(i)) for i in set(a)]) |