操纵计数器信息 - Python 2.7

时间:2013-11-08 03:02:05

标签: python collections counter

我是Python的新手,我有这个程序,我正在修修补补。它应该从输入中获取一个字符串并显示哪个字符最常见。

stringToData = raw_input("Please enter your string: ")
    # imports collections class
import collections
    # gets the data needed from the collection
letter, count = collections.Counter(stringToData).most_common(1)[0]
    # prints the results
print "The most frequent character is %s, which occurred %d times." % (
letter, count)

但是,如果字符串中每个字符有1个字符,则它只显示一个字母,并表示它是最常用的字符。我想在most_common(数字)中更改括号中的数字,但我不希望每次显示其他字母的次数。

谢谢大家的帮助!

1 个答案:

答案 0 :(得分:0)

正如我在评论中解释的那样:

  

您可以将参数留给most_common以获取所有字符的列表,从最常见到最不常见的排序。然后只要循环遍历该结果并收集字符,只要计数器值仍然相同即可。这样你就可以获得最常见的所有角色。

Counter.most_common(n)返回来自计数器的n最常见元素。或者,如果未指定n,它将返回计数器中的所有元素,按计数排序。

>>> collections.Counter('abcdab').most_common()
[('a', 2), ('b', 2), ('c', 1), ('d', 1)]

您可以使用此行为简单地遍历按计数排序的所有元素。只要计数与输出中的第一个元素相同,就会知道元素在字符串中的数量仍然相同。

>>> c = collections.Counter('abcdefgabc')
>>> maxCount = c.most_common(1)[0][1]

>>> elements = []
>>> for element, count in c.most_common():
        if count != maxCount:
            break
        elements.append(element)
>>> elements
['a', 'c', 'b']

>>> [e for e, c in c.most_common() if c == maxCount]
['a', 'c', 'b']