python - 我的嵌套 For 循环运行 "faster"比内联 For 循环

标签 python loops time

对于我所在的类(class),我们被要求编写一个强力方法来查找列表 S1S2 中的 2 个元素,并将其添加到指定值x。到目前为止我已经这样写了:

@timing
def brute_force_nested(x, s1 : list, s2 : list) -> bool:
    for a in s2:
        for b in s1:
            if a + b == x:
                return True
    return False

@timing
def brute_force_inline(x, s1 : list, s2 : list) -> bool:
    return bool([ (a,b) for a in s2 for b in s1 if a + b == x ])

但是当我在终端中运行它们时,我得到了很大的时间差异:

>>> brute_force_nested(5123, S1, S2):

func:brute_force_nested took: 0.007085800170898438 sec and gave: True

>>>func:brute_force_inline(5123, S1, S2)

func:brute_force took: 3.0208868980407715 sec and gave: True

为什么会发生这种情况?我的印象是内联语法本质上只是用于编写嵌套循环的语法糖,但有些东西明显不同,我不知道是什么。

最佳答案

循环确实相等,但不是打破循环的条件。在第一个嵌套循环中,当达到第一个相等时,代码停止。在第二个中,计算所有测试,直到用尽所有组合。

与理解语法的第一个循环等效的是使用生成器和 any,当达到第一个真值时它将停止

return any((a+b==x for a in s2 for b in s1))

关于python - 我的嵌套 For 循环运行 "faster"比内联 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69702333/

相关文章:

algorithm - 时间复杂度——比较不同的算法

Python导入冲突

java - 如何使用递归方法打印 a 到 z

python - tkinter.TclError : couldn't recognize data in image file 错误

ruby - 循环中的循环和在深度循环中分配变量

javascript - 如何通过 jQuery 对象的属性值获取特定元素?

mysql - 戈朗 : How to validate a MySQL timestamp string

javascript - 使用 javascript 转换 xml 日期和时间

Python 进度条显示额外的百分比

python , NumPy ;如何最好地处理可能的 0d 数组