问题描述
小U在学习英文时,需要统计英文句子中每个单词的出现次数,并按照字母顺序将统计结果进行排序。请你帮助小U编写一个程序,统计输入的英文句子中每个单词的出现次数,并将结果按字母顺序排序后输出。
解题思路
我们需要统计一个英文句子中每个单词的出现次数,并将结果按照字母顺序排序后输出。输出格式为 ['单词:次数', ...]。
解题步骤:
- 分割句子:将输入的句子分割成单词列表。
- 统计单词频率:遍历单词列表,使用字典统计每个单词的出现次数。
- 排序:将字典中的键值对按照键(即单词)的字母顺序进行排序。
- 格式化输出:将排序后的单词和它们的频率格式化为题目要求的输出格式。
详细代码
def solution(s: str) -> list:
# 1. 分割句子为单词列表
words = s.split()
# 2. 统计单词频率
word_count = {}
for word in words:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
# 3. 按照字母顺序排序
sorted_words = sorted(word_count.items())
# 4. 格式化输出
result = [f"{word}:{count}" for word, count in sorted_words]
return result
if __name__ == '__main__':
print(solution("New to Python or choosing between Python 2 and Python 3 Read Python 2 or Python 3") == ['2:2', '3:2', 'New:1', 'Python:5', 'Read:1', 'and:1', 'between:1', 'choosing:1', 'or:2', 'to:1'])
print(solution("hello world hello python") == ['hello:2', 'python:1', 'world:1'])
print(solution("the quick brown fox jumps over the lazy dog") == ['brown:1', 'dog:1', 'fox:1', 'jumps:1', 'lazy:1', 'over:1', 'quick:1', 'the:2'])
-
分割句子:使用
split()方法将输入的字符串s分割成一个单词列表。 -
统计单词频率:
-
创建一个空字典
word_count。 -
遍历单词列表,对于每个单词,检查它是否已经在字典中。
- 如果存在,则将对应的值加 1。
- 如果不存在,则将单词添加到字典中,并设置值为 1。
-
排序:使用
sorted()函数对字典的键值对进行排序。sorted()函数会返回一个按照键(即单词)的字母顺序排序的列表。 -
格式化输出:遍历排序后的列表,将每个单词和它的出现次数格式化为
'单词:次数'的形式,并添加到结果列表中。
小结
通过以上步骤,我们可以有效地统计英文句子中每个单词的出现次数,并按照字母顺序排序后输出。这个方法的时间复杂度主要取决于排序操作,通常为 O(n log n),其中 n 是单词的数量。