Python列表推导vs.嵌套循环,简洁/高效



下面两个方法做同样的事情。哪一个在时间/空间复杂性方面更有效?

** Method A**
for student in group.students:
    for grade in student.grades:
        some_operation(grade)
** Method B**
for grade in [grade for student in group.students for grade in student.grades]
    some_operation(grade)

方法B看起来很奇怪而且多余。可以缩短为:

[some_operation(grade) for student in group.students for grade in student.grades]

但是方法A无论如何都更好,因为它不创建列表。简单地把列表扔掉会让读者感到困惑,而且会浪费内存。

它们具有相同的时间复杂度,O(nm),因为它是一个循环在另一个循环上。所以,ngroup.students, mstudents.grades。从功能上讲,这些时间复杂度也应该是相同的,因为它在两个列表上迭代。

最新更新