【发布时间】:2011-12-07 19:19:49
【问题描述】:
在阅读 Toby Segaran 的精彩书籍“Programming Collective Intelligence”时,我遇到了一些我并不完全熟悉的索引分配技术。
以此为例:
createkey='_'.join(sorted([str(wi) for wi in wordids]))
或:
normalizedscores = dict([(u,float(l)/maxscore) for (u,l) in linkscores.items()])
索引中的所有嵌套元组让我有点困惑。实际上分配给这些变量的是什么?我显然假设.join 是一个字符串,但是后者呢?如果有人能解释这些循环的机制,我会非常感激。我认为这些是非常常见的技术,但是对于 Python 来说是新手,我想问一下有点遗憾。谢谢!
【问题讨论】:
-
每个人都提到这些是列表推导。人们没有提到的是那些例子是错误的并且那些方括号应该被省略——它们应该是生成器表达式,它们是相同的,只是它们只根据需要产生值,而不是将它们全部存储在一个列表中。由于您只是立即使用列表然后将它们丢弃,因此最好只使用生成器表达式。
-
@agf 你能举个例子吗?我是这种方法的新手。谢谢!
-
只需用括号替换方括号,
sorted和dict函数将一次要求一个值,生成器表达式将给出该值,而不是将它们全部存储在临时列表。 -
sorted()不建立一个列表吗? -
@agf:我刚刚计时了,
sorted()在生成器表达式上比在列表上花费的时间大约长 10%。
标签: python dictionary indexing variable-assignment