python3 列表元素相互匹配问题?没思路了

2018-10-30 21:08:47 +08:00
 skyshine725
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。

怎么解决。想了一些办法但都不好

1345 次点击
所在节点    问与答
7 条回复
alixali
2018-10-30 21:35:13 +08:00
可以先把两个列表分别进行排序然后进行一次遍历,再分别进行计数。
Trim21
2018-10-30 21:47:50 +08:00
先取一个 a 的 set, 然后判断每个元素在 a 和 b 中的数量, count 加上两个数量的最小值.
Nimrod
2018-10-30 22:07:08 +08:00
匹配一个删掉一个
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
rabbbit
2018-10-30 22:15:45 +08:00
rabbbit
2018-10-30 22:30:54 +08:00
lovestudykid
2018-10-31 04:24:01 +08:00
sum([min(a.count(i),b.count(i)) for i in set(a)])

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/502734

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX