2013-03-24 18 views
1

有沒有更好的方法來編寫此代碼。雖然沒有錯誤,但它似乎將打印的所有字母都打印到列表中。Python:打印用戶輸入的常見字母

我想打印一個字符串中的常見字母,即使不止一個。

這裏是我

mystr = input("Enter a string:") 
s = list(mystr) 
letter_counter = {} 
for word in mystr: 
    if word in letter_counter: 
     letter_counter[word] += 1 
    else: 
     letter_counter[word] = 1 

user_letter = sorted(letter_counter, key = letter_counter.get, reverse = True) 

number_1 = user_letter[:2] 
print(number_1) 

我可以打印正確的字母的唯一方法是通過在

number_1 = user_letter[:2]

設置限制。例如,如果我輸入以下內容:

mystr = input("Thomas Jones") 

中的代碼打印 輸出將

print(number_1)  
[o], [s] 

這是正確的,但如果限制設置爲從23

number_1 = user_letter[:3]

它將打印[o] [s] [a]只有一個a它不應該在那裏。 我希望它的用戶輸入的任何數量的單詞將顯示正確的重複字母而不是限制器。

我很慷慨卡住我不知道如何解決這一

+1

它應該打印出什麼?不知道「打印來自用戶輸入的常見字母」究竟意味着什麼。 – Bemmu 2013-03-24 09:18:19

+0

'托馬斯瓊斯'有兩個'o'和's' @Bemmu,我想OPs尋找重複的字母。 – Ben 2013-03-24 09:21:12

+0

@Ben是的! – 2013-03-24 09:23:19

回答

8
from collections import Counter 
[letter for letter,count in Counter("Thomas Jones").items() if count > 1] 
+0

我的想法正是如此。 – NlightNFotis 2013-03-24 09:24:36

2

你的代碼產生

letter_counter = {'a': 1, ' ': 1, 'e': 1, 'h': 1, 'J': 1, 'm': 1, 'o': 2, 'n': 1, 's': 2, 'T': 1} 
user_letter = ['o', 's', 'a', ' ', 'e', 'h', 'J', 'm', 'n', 'T'] 

這是正確的。

如果你只是想重複的字母,嘗試

user_letter = [letter for letter in letter_counter if letter_counter[letter] > 1] 

或類似的東西。