我正在研究一个用Python编写的3SAT求解器。我正在浏览一个列表列表(在以下示例中称为my_list
)。我还有一个checked
集,它存储my_list
中元素的索引,在遍历列表时不应检查这些元素。您认为以下哪一项会更快?
选项A)
to_be_checked = {i for i in range(len(my_list)) if i not in checked}
for i in to_be_checked:
...
选项B)
for i in range(len(my_list)):
if i not in checked:
...
选项C)
to_be_checked = set(range(len(my_list))) - checked
for i in to_be_checked:
...
答案 0 :(得分:0)
选项A在dict理解中循环了一次数据集,然后如果没有进行任何检查,则可能再次循环了整个数据量,所以〜O(2n)
选项B遍历数据,并且在每个循环上调用“ in”,这将遍历所有not_checked,因此大约为O(n ^ 2)
选项C创建一个集合,该集合隐式地遍历数据,然后执行一个集差异,也遍历数据,然后对该差异调用for循环,因此〜O(3n)
我想说A是最快的,但是您可以通过使用字典摆脱'in'运算符的内部循环,从而使B更快。
实际上,除非您使用足够大的数据集,否则您不会注意到差异