Python 列表理解与嵌套循环,conciseness/efficiency

Python list comprehension vs. nested loop, conciseness/efficiency

以下2种方法做同样的事情。哪一个在 time/space 复杂度方面更有效?

** 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)

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

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

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

但是无论哪种方式,方法 A 都更好,因为它不创建列表。制作一个列表只是为了把它扔掉会让 reader 感到困惑并且浪费内存。