1.热词查询
def takeSecond (elem):
return elem[1]
sentence =input("请输入一个段落:")
list1=[]
for n in '.,!"\n':
sentence=sentence.replace(n,' ')
word=sentence.split()
for k in word:
list1.append(k)
list2=[]
[list2.append(i) for i in list1 if not i in list2]
list3=[]
list4=[]
for m in list2:
o=list1.count(m)
list3=list3+[o]
for z in range(len(list2)):
list4=list4+[(list2[z],list3[z])]
list4.sort(key=takeSecond)
print(list4)
有几个问题和不必要的复杂部分。首先,目标是统计一个段落中每个单词的出现次数,并按出现次数从高到低排序。但是,代码中包含了一些冗余和错误的部分,比如列表推导式用来添加不重复的元素到list2,这实际上是不必要的,因为可以使用集合(set)来自动去重。另外,list3和list4的更新方式也存在一些问题。
下面是一个简化并修正后的版本:
def takeSecond(elem):
return elem[1]
sentence = input("请输入一个段落:")
# 将段落中的标点符号替换为空格,并分割成单词列表
words = sentence.replace('.,!"\n', ' ').split()
# 使用集合去除重复的单词
unique_words = set(words)
# 创建一个字典来存储每个单词的出现次数
word_count = {}
for word in words:
if word in unique_words:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
# 将字典转换为列表,以便按出现次数排序
sorted_words = sorted(word_count.items(), key=takeSecond, reverse=True)
# 打印结果
for word, count in sorted_words:
print(f"{word}: {count}")
代码解释:
输入处理:用户输入一个段落,然后去除段落中的所有标点符号(这里使用了., ,, !, ", \n),并将段落分割成单词列表。
去重:使用集合unique_words来存储唯一的单词,但这一步实际上在统计时可以直接在字典中处理,因为字典的键自动去重。
统计单词出现次数:使用一个字典word_count来记录每个单词出现的次数。
排序和打印:将字典的项(单词和对应的出现次数)转换为列表,然后使用sorted()函数根据出现次数进行排序(降序),并打印结果。