在字典理解中转换为浮动会在其他地方产生语法错误吗?
Casting to float in a dict comprehension creates syntax error elsewhere?
这很奇怪。我正在尝试实现文本频率计算,并在 ipython 笔记本中使用 python 2.7 运行 以下代码。三个版本的功能。
第一个版本,只计算字符串列表中单词的实例并将其粘贴到字典中:
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}
"Ah!"我觉得。这是世界上最容易修复的错误。我正在做整数除法。我不想做整数除法。只需将其中一项设为浮动即可。砰。
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 语句中没有语法错误,因为它在前两个版本中运行良好。嗯。所以很明显,转换为 float 打破了对字典的理解。但这似乎很疯狂。它只是将 int 转换为 float。这是世界上最简单的操作......它是如何打破听写理解的?
我完全被这个难住了...有人有什么好主意吗?
根据 this 元讨论,我代表 Tim Peters 回答这个问题并将其标记为社区维基。
Your parentheses don't balance. When you added float(
, you forgot to add a )
.
这很奇怪。我正在尝试实现文本频率计算,并在 ipython 笔记本中使用 python 2.7 运行 以下代码。三个版本的功能。
第一个版本,只计算字符串列表中单词的实例并将其粘贴到字典中:
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}
"Ah!"我觉得。这是世界上最容易修复的错误。我正在做整数除法。我不想做整数除法。只需将其中一项设为浮动即可。砰。
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 语句中没有语法错误,因为它在前两个版本中运行良好。嗯。所以很明显,转换为 float 打破了对字典的理解。但这似乎很疯狂。它只是将 int 转换为 float。这是世界上最简单的操作......它是如何打破听写理解的?
我完全被这个难住了...有人有什么好主意吗?
根据 this 元讨论,我代表 Tim Peters 回答这个问题并将其标记为社区维基。
Your parentheses don't balance. When you added
float(
, you forgot to add a)
.