誰もが、最も頻繁に出現する文字とそれぞれのカウントを与えられた文字列に返すために私を助けることができますか?与えられた文字列中の所望の文字の頻度
たとえば、"aaaaabbbbccc", 2
が同数の場合は
を返す必要があり、アルファベットの後半に来る文字が順序で最初 が来ます。これはあなたのために開始することができ
"cdbba",2 -> [('b',2), ('d',1)]
'cdbba',3 -> [('b',2), ('d',1), ('c',1)]
誰もが、最も頻繁に出現する文字とそれぞれのカウントを与えられた文字列に返すために私を助けることができますか?与えられた文字列中の所望の文字の頻度
たとえば、"aaaaabbbbccc", 2
が同数の場合は
を返す必要があり、アルファベットの後半に来る文字が順序で最初 が来ます。これはあなたのために開始することができ
"cdbba",2 -> [('b',2), ('d',1)]
'cdbba',3 -> [('b',2), ('d',1), ('c',1)]
:たとえば
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することができます結果
まずは - あなたはこれまでに何を試しましたか? ご質問の前に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]
これは完全にあなたの質問を解決することはできません - あなたはまだ関係を壊すする方法を理解する必要があります。最初の出現の別の辞書を作成し(文字をキーとして持つ辞書と値としての索引のみを作成する)、結びつきを識別して解決してから、それを再確認する前にもう一度チェックします。
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
私はこのコード – Anna
デフ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
で答えを得ましたこのコードはまた – Anna
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)]
なぜdownvoteを解決する?これは正しい答えを与える。 – levi
2'、 '例でcollections.Counter' – cdarke
ベターを使用してみてください、 '2'の意味は何ですか?アルファベットの最初の2文字か、文字列の最初の2文字ですか? – zondo
' "aaaaabbbbccc" を使用し、辞書 – cdarke