我不知道下面两个代码段是否有相同的性能。你知道吗
代码1:
for fid1 in FId1:
if fid1 in [i['FId'] for i in entity['F']]:
res.append([intId1,fid1,entity['Id'],intId2])
代码2:
temp = [i['FId'] for i in entity['F']]
tempid = entity['Id']
for fid1 in FId1:
if fid1 in temp:
res.append([intId1,fid1,tempid,intId2])
基本上,在循环中我不改变实体。你知道吗
我认为在Code1中,如果没有优化,它会在每个循环中生成那个列表。虽然它可读性更好,但它会慢一点吗?你知道吗
因此我尝试存储temp,这样列表只生成一次。你知道吗
性能对于这项任务非常重要。。。你知道吗
没错,第一个代码将为每个迭代生成临时列表。这对于CPython(本机Python解释器)是正确的。从技术上讲,您在代码2中使用的优化称为precomputation。你知道吗
但是,如果您使用像PyPy这样的优化器,它可能会有所不同,因为它可能会检测到您的列表从未更改,从而将其存储为常量。你知道吗
不仅要在循环外创建列表,还要将其更改为set(如果它是常量,则更改为frozenset)——您将体验
O(1)
成员资格测试时间。你知道吗当绩效很重要时,衡量它。你知道吗
如果你不衡量绩效,你就不知道你取得了什么样的绩效。更重要的是,您不知道将来的更改是否会提高或降低性能。你知道吗
相关问题 更多 >
编程相关推荐