• 【python cookbook】【数据结构与算法】12.找出序列中出现次数最多的元素


    问题:找出一个元素序列中出现次数最多的元素是什么

    解决方案:collections模块中的Counter类正是为此类问题所设计的。它的一个非常方便的most_common()方法直接告诉你答案。

    # Determine the most common words in a list
    
    words = [
       'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
       'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the',
       'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into',
       'my', 'eyes', "you're", 'under'
    ]
    
    from collections import Counter
    word_counts = Counter(words)
    top_three = word_counts.most_common(3)
    print(top_three)
    # outputs [('eyes', 8), ('the', 5), ('look', 4)]
    
    # Example of merging in more words
    
    morewords = ['why','are','you','not','looking','in','my','eyes']
    word_counts.update(morewords)  #使用update()增加计数
    print(word_counts.most_common(3))
    >>> ================================ RESTART ================================
    >>> 
    [('eyes', 8), ('the', 5), ('look', 4)]
    [('eyes', 9), ('the', 5), ('my', 4)]
    >>> 

    在底层实现中,Counter是一个字典,在元素和它们出现的次数间做了映射。

    >>> word_counts
    Counter({'eyes': 9, 'the': 5, 'my': 4, 'look': 4, 'into': 3, 'around': 2, 'not': 2, "don't": 1, 'under': 1, 'are': 1, 'looking': 1, "you're": 1, 'you': 1, 'why': 1, 'in': 1})
    >>> word_counts.most_common(3)  #top_three
    [('eyes', 9), ('the', 5), ('my', 4)]
    >>> word_counts['not']
    2
    >>> word_counts['eyes']
    9
    >>> word_counts['eyes']+1
    10
    >>> word_counts
    Counter({'eyes': 9, 'the': 5, 'my': 4, 'look': 4, 'into': 3, 'around': 2, 'not': 2, "don't": 1, 'under': 1, 'are': 1, 'looking': 1, "you're": 1, 'you': 1, 'why': 1, 'in': 1})
    >>> word_counts['eyes']=word_counts['eyes']+1  #手动增加元素计数
    >>> word_counts
    Counter({'eyes': 10, 'the': 5, 'my': 4, 'look': 4, 'into': 3, 'around': 2, 'not': 2, "don't": 1, 'under': 1, 'are': 1, 'looking': 1, "you're": 1, 'you': 1, 'why': 1, 'in': 1})
    >>> 

    增加元素出现次数可以通过手动进行增加,也可以借助update()方法;

    另外,Counter对象另一个特性是它们可以同各种数学运算操作结合起来使用:

    >>> a=Counter(words)
    >>> a
    Counter({'eyes': 8, 'the': 5, 'look': 4, 'my': 3, 'into': 3, 'around': 2, 'under': 1, "you're": 1, 'not': 1, "don't": 1})
    >>> b=Counter(morewords)
    >>> b
    Counter({'not': 1, 'my': 1, 'in': 1, 'you': 1, 'looking': 1, 'are': 1, 'eyes': 1, 'why': 1})
    >>> c=a+b
    >>> c
    Counter({'eyes': 9, 'the': 5, 'my': 4, 'look': 4, 'into': 3, 'around': 2, 'not': 2, "don't": 1, 'under': 1, 'are': 1, 'looking': 1, "you're": 1, 'you': 1, 'in': 1, 'why': 1})
    >>> # substract counts
    >>> d=a-b
    >>> d
    Counter({'eyes': 7, 'the': 5, 'look': 4, 'into': 3, 'my': 2, 'around': 2, 'under': 1, "you're": 1, "don't": 1})
    >>> 

    当面对任何需要对数据制表或计数的问题时,Counter对象都是你手边的得力工具。比起利用字典自己手写算法,更应采用该方式完成任务。

  • 相关阅读:
    GoWeb-Gin 文件上载
    Node.JS + Mysql数据库
    Node.JS 项目打包 JXCore
    Express web框架 upload file
    hdoj 4430 Yukari's Birthday
    hdoj 4282 A very hard mathematic problem
    hdoj 3750 Guess Game
    hdoj 2199 Can you solve this equation?
    uva 11384 Help is needed for Dexter
    ios中fixed元素在滚动布局中的延时渲染问题
  • 原文地址:https://www.cnblogs.com/apple2016/p/5747075.html
Copyright © 2020-2023  润新知