我正在学习Python,我需要编写一个程序来确定一首诗中出现次数最多的单词。困扰我的问题是将一首诗的一行解析成包含该诗的单词的单一列表。当我解决它时,我将毫不费力地确定出现次数最多的单词。
我可以通过重复调用input()来访问诗的行,最后一行包含三个字符###。
所以,我写道:
while True:
y = input()
if y == "###":
break
y = y.lower()
y = y.split()
并输入:
Here is a line like sparkling wine
Line up now behind the cow
###
得到了结果:
['here', 'is', 'a', 'line', 'like', 'sparkling', 'wine']
['line', 'up', 'now', 'behind', 'the', 'cow']
如果我试着打电话给y [0],我得到:
here
line
如何在同一个变量中连接两个列表,或者如何将每一行分配给不同的变量?
任何提示都表示赞赏。感谢。
答案 0 :(得分:5)
您需要使用list.extend()
y
添加到现有列表中
words = []
while True:
y = input()
if y == "###":
break
y = y.lower()
y = y.split()
words.extend(y)
现在words
是一个列表,其中包含用户输入的所有字词。
演示:
>>> words = []
>>> while True:
... y = input()
... if y == "###":
... break
... y = y.lower()
... y = y.split()
... words.extend(y)
...
Here is a line like sparkling wine
Line up now behind the cow
###
>>> print(words)
['here', 'is', 'a', 'line', 'like', 'sparkling', 'wine', 'line', 'up', 'now', 'behind', 'the', 'cow']
答案 1 :(得分:3)
words = []
while True:
y = input()
if y == "###":
break
words.extend(y.lower().split())
from collections import Counter
Counter(words).most_common(1)
这整个代码可以压缩成以下一个代码:
Counter(y.lower() for x in iter(input, '###') for y in x.split()).most_common(1)
例如
>>> sys.stdin = StringIO.StringIO("""Here is a line like sparkling wine
Line up now behind the cow
###""")
>>> Counter(y.lower() for x in iter(input, '###') for y in x.split()).most_common(1)
[('line', 2)]
根据要求,没有任何import
s
c = {} # stores counts
for line in iter(input, '###'):
for word in line.lower().split():
c[word] = c.get(word, 0) + 1 # gets count of word or 0 if doesn't exist
print(max(c, key=c.get)) # gets max key of c, based on val (count)
不必在字典上进行第二次传递以找到最大字词,随时跟踪它:
c = {} # stores counts
max_word = None
for line in iter(input, '###'):
for word in line.lower().split():
c[word] = c.get(word, 0) + 1 # gets count of word or 0 if doesn't exist
if max_word is None:
max_word = word
else:
max_word = max(max_word, word, key=c.get) # max based on count
print(max_word)