2013-03-24 72 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] 

或类似的东西。