2016-07-31 14 views
0

誰もが、最も頻繁に出現する文字とそれぞれのカウントを与えられた文字列に返すために私を助けることができますか?与えられた文字列中の所望の文字の頻度

たとえば、"aaaaabbbbccc", 2が同数の場合は

を返す必要があり、アルファベットの後半に来る文字が順序で最初 が来ます。これはあなたのために開始することができ

"cdbba",2 -> [('b',2), ('d',1)] 
'cdbba',3 -> [('b',2), ('d',1), ('c',1)] 
+2

2'、 '例でcollections.Counter' – cdarke

+5

ベターを使用してみてください、 '2'の意味は何ですか?アルファベットの最初の2文字か、文字列の最初の2文字ですか? – zondo

+0

' "aaaaabbbbccc" を使用し、辞書 – cdarke

答えて

0

:たとえば

from collections import Counter 
import string 
s = "aaaaabbbbccc" 
counter = Counter(s) 

for c in string.ascii_letters: 
    if counter[c] > 0: 
      print (c, counter[c]) 

あなたはコードを調整し、代わりに印刷、それを並べ替え、リストに結果を保存し、印刷トップ2することができます結果

0

まずは - あなたはこれまでに何を試しましたか? ご質問の前にthisをお読みください!

これを解決するには、まず周波数の辞書を作成し、それをタプルの配列に変換して最後にソートします。

def freq(st, n): 
    # Create the dictionary 
    dct = {} 
    for c in st: 
     dct[c] = dct.get(c, 0) + 1 
    # Convert to array of tuples 
    ar = [(key, val) for key, val in dct.iteritems()] 
    # Sort the array: 
    ar.sort(key=lambda x: x[1]) 

    return ar[:n] 

これは完全にあなたの質問を解決することはできません - あなたはまだ関係を壊すする方法を理解する必要があります。最初の出現の別の辞書を作成し(文字をキーとして持つ辞書と値としての索引のみを作成する)、結びつきを識別して解決してから、それを再確認する前にもう一度チェックします。

0
def freq(word, n): 
    l1 = list(word) 
    l3 = [] 
    l2 = [] 
    l4 = [] 
    s = set(l1) 
    l2 = list(s) 

    def count(p): 
     c = 0 
     for a in word: 
      if a in word: 
       c = c + p.count(a) 
     l3.append(c) 
     return c 

    l2.sort(key=count) 

    l3.sort() 
    l4 = list(zip(l2, l3)) 
    l4.reverse() 
    l4.sort(key=lambda l4: ((l4[1]), (l4[0])), reverse=True) 
    return l4[0:n] 
    pass 
+0

私はこのコード – Anna

0

デフFREQ(ワード、N): RES = [] Aは= [] B = []内蔵クラス C = 0

if type(word) != str or type(n) != int: 
    c = 1 
    raise TypeError 
if n <= 0: 
    c = 1 
    raise ValueError 
for x in word: 
    a.append(x) 
    b.append(word.count(x)) 
c = zip(a, b) 
c = list(set(c)) 
c.sort(key=lambda t: t[0], reverse=True) 

c.sort(key=lambda t: t[1], reverse=True) 
count=0 
for x in range(len(c)): 
    count+=1 
if n>count: 
    n=count 
for x in range(n): 
    res.append(c[x],) 
return res 
+0

で答えを得ましたこのコードはまた – Anna

-1

Counterと呼ばれる機能を提供most_common

最も一般的なn個の要素とその個数のリストを、最も一般的な から返します。 nが省略されているかNoneである場合、most_common() はカウンタのすべての要素を返します。等しい数を持つ要素は が任意に注文されています

文字とその周波数を取得した後、我々は彼の周波数のために最初にそれらをソートする必要があるとネクタイがある場合、我々は最高のASCIIコードの文字を選択します。それから、私たちは、N個の最も一般的な要素を任意の数でスライスします。

from collections import Counter 

s = "cdbba" 
sorted_counter = sorted(Counter(s).most_common(), 
         key = lambda x: (-x[1], -ord(x[0]))) 
slice_counter = sorted_counter[:2] # here you select n most common 
>[('b',2), ('d',1)] 
slice_counter = sorted_counter[:3] # here you select n most common 
>[('b',2), ('d',1), ('c',1)] 
+0

なぜdownvoteを解決する?これは正しい答えを与える。 – levi

関連する問題