【问题标题】:Casting to float in a dict comprehension creates syntax error elsewhere? [closed]在字典理解中转换为浮动会在其他地方产生语法错误? [关闭]
【发布时间】:2015-06-21 17:06:26
【问题描述】:

这很奇怪。我正在尝试实现文本频率计算,并在 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}

“啊!”我认为。这是世界上最容易修复的错误。我正在做整数除法。我不想做整数除法。只需将其中一个条款设为浮动即可。砰。

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 转换为一个浮点数。这是世界上最简单的操作……它是如何破坏听写理解的?

我完全被这个难住了……有人有什么好主意吗?

【问题讨论】:

  • 你少了一个括号...
  • 你的括号不平衡。当您添加float( 时,您忘记添加)
  • aaaaaahhhhhhhhhhhhhh始终是小愚蠢的事情。我真的只花了半个小时查找理解文档......

标签: python dictionary-comprehension


【解决方案1】:

根据 this 元讨论,我将代表 Tim Peters 回答这个问题并将其标记为社区 wiki。

你的括号不平衡。当您添加float( 时,您忘记添加)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-26
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多