V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
skyshine725
V2EX  ›  问与答

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

  •  
  •   skyshine725 · 2018-10-30 21:08:47 +08:00 · 1500 次点击
    这是一个创建于 2218 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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。

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

    7 条回复    2018-10-31 04:24:01 +08:00
    alixali
        1
    alixali  
       2018-10-30 21:35:13 +08:00
    可以先把两个列表分别进行排序然后进行一次遍历,再分别进行计数。
    Trim21
        2
    Trim21  
       2018-10-30 21:47:50 +08:00
    先取一个 a 的 set, 然后判断每个元素在 a 和 b 中的数量, count 加上两个数量的最小值.
    Nimrod
        3
    Nimrod  
       2018-10-30 22:07:08 +08:00 via Android
    匹配一个删掉一个
    princelai
        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
    rabbbit
        5
    rabbbit  
       2018-10-30 22:15:45 +08:00
    rabbbit
        6
    rabbbit  
       2018-10-30 22:30:54 +08:00
    lovestudykid
        7
    lovestudykid  
       2018-10-31 04:24:01 +08:00
    sum([min(a.count(i),b.count(i)) for i in set(a)])
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2676 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:33 · PVG 23:33 · LAX 07:33 · JFK 10:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.