Python列表理解与嵌套循环,简洁/高效

时间:2016-09-29 20:49:20

标签: python code-complexity

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

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

2 个答案:

答案 0 :(得分:1)

方法B看起来很怪异和多余。你可以把它缩短为:

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

但是A方法更好,因为它没有创建列表。制作一个简单的列表就会让读者感到困惑并浪费记忆。

答案 1 :(得分:0)

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