[英]Python, using dictionaries and sets to keep track of all occurences of a word
我正在嘗試解決這個問題:
給你 n 個單詞。 有些話可能會重復。 對於每個單詞,輸出其出現次數。 輸出順序應與單詞出現的輸入順序相對應。 有關說明,請參閱示例輸入/輸出。
注意:每個輸入行都以“\\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())
我的策略如下:
如果單詞不在mySet 中,則將其添加到集合中並在myDict上創建一個值鍵對,單詞為鍵,1 為值。
如果該詞已經在集合中,則增加該詞在字典中的值。
然而,一半的測試用例成功了,其余的都是“錯誤的答案”。 所以,我想知道,有人能指出我想添加到這段代碼中的什么嗎?
你的錯誤在於inp = input()[:-1]
。 [:-1]
切斷單詞的最后一個字符。 我猜您正在嘗試刪除換行符,但input()
已經“剝離尾隨換行符”。 演示:
>>> [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())
這個讀取整行,所以這里的字符串確實包含換行符。 如果所有行都有它,那也沒關系,但是不,HackerRank 犯下了不以換行符結束最后一行的大罪。 所以我strip
它們趕走的每一行。 嘆。
在問題中,您不需要使用set
屬性,並且您使用輸入的方式即 input()[::-1] 是錯誤的,因為它正在反轉您輸入的輸入,即輸入abc
it將其存儲為cba
。
現在要解決問題,因為 OP 已經想出采用唯一的項目使用集,並獲得每個單詞使用字典的頻率。 但是使用 set 是昂貴的操作,並且字典可用於獲取唯一詞,因為它存儲可用於獲取唯一元素的唯一鍵,並使用與您正在執行的操作相同的操作來獲取頻率。
而不是通過dict[key]=value
value 在字典中添加 key, value 更好地使用 inbuild 方法更新當前字典,即dict1.update(dict2)
其中dict1
是原始字典, dict2
是帶有鍵和值的新字典, dict2={key:value}
,通過這種方式,您將保持 dict 中元素的順序。
獲取唯一單詞的 len ,字典工作的 len ,即len(dic)
並獲取需要打印的每個單詞值的頻率,即print(*dic.values())
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())
n=int(input())
word_list=[]
for i in range(n):
word_list.append(input())
New_word_list=[]
for element in word_list:
if element in New_word_list:
New_word_list=New_word_list
else:
New_word_list.append(element)
print(len(New_word_list))
for element in New_word_list:
print(word_list.count(element), end=" ")
輸入:
10
cat
dog
dog
rabbit
cat
pig
horse
pig
pig
goat
結果:
6
2 2 1 3 1 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.