1

次の 2 つの方法は同じことを行います。時間/空間の複雑さの点でどちらがより効率的ですか?

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

2 に答える 2

1

メソッド B は奇妙で冗長に見えます。次のように短縮できます。

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

ただし、方法 A はリストを作成しないため、どちらの方法でも優れています。単純にリストを作成して捨てるのは、読者を混乱させ、メモリを浪費します。

于 2016-09-29T20:52:26.583 に答える
0

O(nm)これらは、別のループのループであるため、同じ時間複雑度 を持ちます。つまり、ngroup.studentsであり、mは ですstudents.grades。機能的には、どちらの方法でも両方のリストを反復しているため、これらも同じ時間の複雑さである必要があります。

于 2016-09-29T20:51:45.873 に答える