为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中解析多行

在Python中解析多行

阿晨1998 2021-03-12 10:08:48
我目前正在学习Python,我需要编写一个程序来确定一首诗中出现次数最多的单词。使我困扰的问题是将一首诗的行解析成一个包含诗词的单列表。当我解决它时,我将毫不费力地确定出现次数最多的单词。我可以通过反复调用input()来访问这首诗的行,最后一行包含三个字符###。所以,我写道:while True:   y = input()   if y == "###":     break   y = y.lower()   y = y.split()并输入:Here is a line like sparkling wineLine up now behind the cow###得到了结果:['here', 'is', 'a', 'line', 'like', 'sparkling', 'wine']['line', 'up', 'now', 'behind', 'the', 'cow']如果我尝试调用y [0],则会得到:hereline如何在同一变量内连接两个列表,或者如何将每一行分配给不同的变量?
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

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小号


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)


查看完整回答
反对 回复 2021-03-31
  • 2 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号