我试图优化一个嵌套的for循环,将数组中的一个元素与数组中的其余元素进行比较。在
有两部分,第一部分是例如,一个数组有3个元素,每个元素都是一个字典:
[{"someKey_1":"a"}, {"someKey_1":"b"}, {"somekey_1":"a"}]
第一次迭代(第一个元素与第二个元素比较):
测试两个元素的“someKey”键,因为a!=b,那我们什么也不做
第2次迭代(第1个元素与第3个元素比较):
测试两个元素的“someKey”键,因为a==a,我们做一些逻辑
代码:for idx, val in enumerate(set_of_pk_values):
for idx_2, val_2 in enumerate(set_of_pk_values):
if (val['someKey'] == val_2['someKey'] and idx != idx_2):
#Some Logic
第二部分与前面的示例(列表中有3个项)非常相似,在同一个字典中,我们有一个数组与一个键相关联(现在数组的每个元素中都有两个键),比如:
^{pr2}$
第一次迭代(第一个元素与第二个元素比较):
使用键someKey_1在数组中循环
b==b(第二个元素是someKey_2),然后执行一些逻辑
f!=b(第二个元素是someKey_2),不执行任何逻辑
第2次迭代(第1个元素与第3个元素比较):
使用键someKey_1在数组中循环
b==c(第三个元素是someKey_2),然后执行一些逻辑
f!=c(第三个元素是someKey_2),不执行任何逻辑
代码:for idx, val in enumerate(set_of_pk_values):
for idx_2, val_2 in enumerate(set_of_pk_values):
for pred in val['someKey_1']:
if(val_2['someKey_2'] == pred):
#Some Logic
目前第一个嵌套循环的运行时间:21秒,第二个嵌套循环大约19秒。与其他流程(1-2秒)相比,这部分显然是一个瓶颈。在
有人能告诉我如何优化这段简单但非常耗时的代码吗?在