1

私は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 つずつ含まれている場合は、文字が 1 つだけ表示され、それが最も頻繁に使用される文字であることが示されます。most_common(数字)の括弧内の数字を変えようと思ったのですが、毎回他の文字を何度も表示するのは嫌でした。

そのすべての助けに感謝します!

4

1 に答える 1

0

コメントで説明したように:

パラメーターを省略してmost_common、最も一般的なものから最も一般的でないものへと並べられたすべての文字のリストを取得できます。次に、その結​​果をループして、カウンター値がまだ同じである限り、文字を収集します。そうすれば、最も一般的なすべての文字を取得できます。

Counter.most_common(n)nカウンターから最も一般的な要素を返します。または、 wherenが指定されていない場合は、カウント順に並べられたカウンターからすべての要素が返されます。

>>> 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']
于 2013-11-08T13:57:04.650 に答える