1

有没有更好的方法来编写这段代码。虽然没有错误,但它似乎打印了我输入的所有字母都排序到一个列表中。

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

这是我所拥有的

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不应该存在的内容。我想要它,以便用户输入的任何数量的单词都将显示正确的重复字母而没有限制器。

我很自由,我不知道如何纠正这个

4

2 回答 2

8
from collections import Counter
[letter for letter,count in Counter("Thomas Jones").items() if count > 1]
于 2013-03-24T09:23:47.787 回答
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]

或类似的东西。

于 2013-03-24T09:25:36.207 回答