python字符串索引赋值,Python:用于索引赋值的循环

这篇博客探讨了如何使用列表推导式和生成器表达式来优化Python代码,特别是在处理大型数据集时。文章通过实例展示了如何将字符串列表排序并连接成一个大字符串,以及如何对字典的值进行归一化处理。此外,还比较了两种方法的时间复杂度和实际运行速度,强调了在不影响性能的情况下选择更简洁代码的重要性。
摘要由CSDN通过智能技术生成

[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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值