2017-12-16 15 views
2

プログラム入力は文字列です。この文字列から、私は最も一般的な手紙が欲しいです。予想単語内で最も一般的な文字を検索します。アルファベット順

def most_Wanted(text="Hello Oman"): 
    lst = [x for x in text.replace(" ","").lower() if x.isalpha] 
    count = {} 
    for letter in lst: 
     if letter in count: 
      count[letter] += 1 
     else: 
      count[letter] = 1 
    count = list(count.items()) 
    sorted(count, key=lambda x: (-x[1],x[0])) 
    print(count[0][0]) 

l #though o and l appear 3 times, l is before o in the latin alphabet 

出力:

同じ周波数で複数の文字があることの場合には、私は、ラテンアルファベット

コードで最初に来るものを返します

h #there seems to be an error in the sorting as the first pair of tuples in the list always seems to be the first letter of the text? 

私が好むと思いますが、コードをすっきりさせるための提案はすべて問題ありません現時点でモジュールを使用していないので、私はコアのPythonを学ぶことができます。ありがとうございました:)

+3

誰がこれを拒否しましたか? OPには、コード、期待値、実際の出力があります。 +1 – timgeb

+0

sorted()はソートされたリストを返します。 (0)[0]) – Mateusz

+0

[OK]を、私は今downvoteを保証するいくつかの理由を見ることができます:最初に、 'def most_Wanted(" Hello Oman "):'の最初の行は無効な構文です、私はそれを編集しました。第二に、私は主張された実際の出力を再現することができません。 – timgeb

答えて

3

主な問題は、sortedが新しいリストを返すことです。それはインプレースではありません。

あなたは、その戻り値を再割り当て、または.sort()を使用する必要があり、次のいずれか

count = sorted(count, key=lambda x: (-x[1],x[0])) 

または

count.sort(key=lambda x: (-x[1],x[0])) 


ラインにおける問題

lst = [x for x in text.replace(" ","").lower() if x.isalpha] 

if x.isalphaでもありますいつも行くo実際に呼び出す代わりに関数を参照しているだけなので、Trueを返します。

に変更する必要があります。
lst = [x for x in text.replace(" ","").lower() if x.isalpha()] 
+0

これは非常に感謝のメモを作った:)ここに複雑で簡素化することができるものはありますか? –

+1

@KOOTSHOOTS全部実際に。コレクションからインポートカウンタ。 count =カウンター( "こんにちはオマーン"); print(count.most_common()[0] [0]) ' – DeepSpace

+0

モジュールを使用しないでください?より簡単な方法がありますか? –

関連する問題