Py学习  »  Python

Python,使用字典和集合来跟踪单词的所有出现

muyustan • 5 年前 • 1665 次点击  

我在努力解决 this 问题:

出现次数。输出顺序应与 输入单词的出现顺序。参见示例输入/输出 澄清。

注意:每个输入行以“\n”字符结尾。

第一行包含整数n。

接下来的n行每行包含一个

输出格式

输出2行。在第一行,输出不同单词的数量 从输入。在第二行,输出出现的次数 根据每个词在输入中的外观来区分它们。

我已经实现了这样的解决方案,

# Enter your code here. Read input from STDIN. Print output to STDOUT

n  = int(input())

mySet = set()
myDict = {}

for i in range(n):
    inp = input()[:-1]
    if inp not in mySet:
        mySet.add(inp)
        myDict[inp] = 1
    else:
        myDict[inp] += 1

print(len(mySet))
# print(' '.join(list(map(str, myDict.values()))))
print(*myDict.values())

如果这个词不在 ,将其添加到集合并在 密迪克特 以单词为键,1为值。

然而,一半的测试用例是成功的,而其余的则是“错误的答案”。所以,我想知道,有谁能指出我遗漏了什么添加到这个代码中?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/55887
 
1665 次点击  
文章 [ 2 ]  |  最新文章 5 年前
sahasrara62
Reply   •   1 楼
sahasrara62    5 年前
n = int(input())
dic  = {}

for _ in range(n):
  w = input()
  if w in dic.keys():
    dic[w]+=1
  else:
    dic.update({w:1})

print(len(dic.keys()))
print(*dic.values())
Heap Overflow
Reply   •   2 楼
Heap Overflow    5 年前

你的错误是 inp = input()[:-1] [:-1] 切掉这个词的最后一个字符。我想你是想删除换行符,但是 input() 已经是了“ stripping a trailing newline

>>> [input() for _ in range(2)]
foo
bar
['foo', 'bar']

更简单的解决方案,顺便说一句:

from collections import Counter

ctr = Counter(input() for _ in range(int(input())))
print(len(ctr))
print(*ctr.values())

from collections import Counter

ctr = Counter(map(input, [''] * int(input())))
print(len(ctr))
print(*ctr.values())

另一个:

from collections import Counter
import sys

next(sys.stdin)
ctr = Counter(map(str.strip, sys.stdin))
print(len(ctr))
print(*ctr.values())

这一个读整行,所以这里的字符串 包括换行符。那没关系,如果 全部的 strip 每一行都有。叹息。