编写一个读取单词列表的程序。然后,程序输出这些单词及其频率(不区分大小写)

问题描述 投票:0回答:4

如果输入的代码是:

hey Hi Mark hi mark

程序希望小写数字计数并且单词列表如果是大写则保持大写。所以正确的输出是:

hey 1
Hi 2
Mark 2
hi 2
mark 2

我使用此代码创建了正确的数字计数和列表:

line = input()
norm = line.split()
low = line.lower().split()
for chr in low:
    freq = low.count(chr)
    print(freq)
for x in norm:
    print(x)

其输出是:

1
2
2
2
2
hey
Hi
Mark
hi
mark

我以为我可以在最后一个 for 循环中使用 print(x,freq) 来给出正确的输出,但它出于某种不正当的原因创建了一个额外的嘿,这成为了输出:

hey 2
Hi 2
Mark 2
hi 2
mark 2

我不知道它在哪里得到了额外的关注。 无论如何,有没有办法组合 2 个 for 循环的打印结果来创建正确的输出?或者你知道额外的“嘿”是从哪里来的吗?

python list split
4个回答
0
投票

您可以使用

zip

一次迭代原始版本和较低版本
for word, word_lower in zip(norm, low):
    print(word, low.count(word_lower))

0
投票
wordInput = input()

myList = wordInput.split(" ")

for i in myList:

   print(i,myList.count(i))

0
投票

这是一个非常简单的方法,使用您迄今为止所学到的知识:

words = input().split()

for word in words:
    print(word, words.count(word))

简而言之,单词在 for 循环中被分割,因此您可以从 input() 迭代每个元素。从那里,您可以使用一个输出语句,该语句利用 Python 中的 count() 功能来获得满分。


0
投票

我知道这是一篇旧帖子,但我觉得我在其他地方找不到正确的解决方案,所以这是我的有效版本。

str_words = input()
list_words = str_words.split()
list_lower_words = [i.lower() for i in list_words]

for i in range(len(list_lower_words)):
    word = list_words[i]
    word_lower = list_lower_words[i]
    count = list_lower_words.count(word_lower)
    print(f"{word} {count}")

这可能不是最佳解决方案,但我在这里使用了两个列表而不是字典,因为我知道他们想要的输出重用相同的变量名,这不适用于字典或使用 count()。

© www.soinside.com 2019 - 2024. All rights reserved.