[str(wi) for wi in wordids]
a = [str(wi) for wi in wordids]
是相同的
a = []
for wi in wordids:
a.append(str(wi))
所以
createkey='_'.join(sorted([str(wi) for wi in wordids]))
从wordid中的每个项创建一个字符串列表,然后对该列表进行排序,并使用_作为分隔符将其连接成一个大字符串.
正如agf正确指出的那样,你也可以使用一个生成器表达式,它看起来就像一个列表推导,但带括号而不是括号.如果您以后不需要它,则可以避免构建列表(除了迭代它).如果你已经有括号,在这种情况下有排序(…),你可以简单地删除括号.
但是,在这种特殊情况下,你不会获得性能优势(事实上,它会慢大约10%;我计时),因为sorted()无论如何都需要构建一个列表,但它看起来更好一点:
createkey='_'.join(sorted(str(wi) for wi in wordids))
normalizedscores = dict([(u,float(l)/maxscore) for (u,l) in linkscores.items()])
遍历字典链接的项目,其中每个项目是键/值对.它创建一个key / l / maxscore元组列表,然后将该列表转换回字典.
但是,从Python 2.7开始,您也可以使用dict comprehensions:
normalizedscores = {u:float(l)/maxscore for (u,l) in linkscores.items()}
这是一些时间数据:
Python 3.2.2
>>> import timeit
>>> timeit.timeit(stmt="a = '_'.join(sorted([str(x) for x in n]))", setup="import random; n = [random.randint(0,1000) for i in range(100)]")
61.37724242267409
>>> timeit.timeit(stmt="a = '_'.join(sorted(str(x) for x in n))", setup="import random; n = [random.randint(0,1000) for i in range(100)]")
66.01814811313774
Python 2.7.2
>>> import timeit
>>> timeit.timeit(stmt="a = '_'.join(sorted([str(x) for x in n]))", setup="import random; n = [random.randint(0,1000) for i in range(100)]")
58.01728623923137
>>> timeit.timeit(stmt="a = '_'.join(sorted(str(x) for x in n))", setup="import random; n = [random.randint(0,1000) for i in range(100)]")
60.58927580777687