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)
,因为它是在另一个循环之上的循环。所以,n
是 group.students
,m
是 students.grades
。从功能上讲,这些也应该具有相同的时间复杂度,因为它以任何一种方式迭代两个列表。
方法B看起来很奇怪而且多余。您可以将其缩短为:
[some_operation(grade) for student in group.students for grade in student.grades]
但是无论哪种方式,方法 A 都更好,因为它不创建列表。制作一个列表只是为了把它扔掉会让 reader 感到困惑并且浪费内存。
以下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)
,因为它是在另一个循环之上的循环。所以,n
是 group.students
,m
是 students.grades
。从功能上讲,这些也应该具有相同的时间复杂度,因为它以任何一种方式迭代两个列表。
方法B看起来很奇怪而且多余。您可以将其缩短为:
[some_operation(grade) for student in group.students for grade in student.grades]
但是无论哪种方式,方法 A 都更好,因为它不创建列表。制作一个列表只是为了把它扔掉会让 reader 感到困惑并且浪费内存。