0
這很奇怪。我試圖實現文本頻率計算,並在ipython筆記本中使用python 2.7運行以下代碼。三個版本的功能。在dict理解中投射浮動會在別處創建語法錯誤?
第一個版本,只是計算單詞的實例中的字符串列表,並把它貼在一本字典:
testList = ['I', 'am', 'a', 'list', 'of', 'strings']
def tf1(listOfStrs):
thedict = dict((x,listOfStrs.count(x)) for x in set(listOfStrs))
print thedict
# produces expected output:
> {'a': 1, 'I': 1, 'am': 1, 'list': 1, 'of': 1, 'strings': 1}
好吧,這工作的罰款。通過將每個出現次數除以單詞總數得到頻率的時間。應產生0.16 ...等。
def tf2(listOfStrs):
print len(listOfStrs)
thedict = dict((x,listOfStrs.count(x)/len(listOfStrs)) for x in set(listOfStrs))
print thedict
tf2(testList)
> 6
> {'a': 0, 'I': 0, 'am': 0, 'list': 0, 'of': 0, 'strings': 0}
「啊!」我認爲。這是世界上最容易修復的錯誤。我在做整數除法。我不想做整數除法。只需將其中一個條件浮動即可。巴姆。
def tf2(listOfStrs):
print len(listOfStrs)
thedict = dict((x,listOfStrs.count(x)/float(len(listOfStrs)) for x in set(listOfStrs))
print thedict
> File "<ipython-input-13-db67e35f2596>", line 3
> thedict = dict((x,listOfStrs.count(x)/float(len(listOfStrs)) for x in set(listOfStrs))
> ^
> SyntaxError: invalid syntax
????我知道for語句中沒有語法錯誤,因爲它在前兩個版本中的血腥效果很好。嗯。所以很明顯,投射到浮動打破了字典的理解。但那似乎很瘋狂。它只是將一個int投射到一個浮點數上。這是世界上最簡單的操作......它是如何打破詞典理解?
我完全被這個難住...任何人有任何明智的想法?
您錯過了一個準... – nneonneo
您的圓括號不平衡。當你添加'float(',你忘了添加一個')'。 –
Aaaaahhhhhhhhhh它總是有點愚蠢的事情。我認真地花了半個小時查閱了理解文檔... –