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 1
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)])
|