0

パフォーマンスとコーディングスタイルの観点から、両方のアプローチは同等ですか?

def foo(n):
    return n*2

# case 1 with ".append(function())"

mylist = [1,2,3,4,5,6,7,8,9,10]
result = list()
for l in mylist:
    result.append(foo(l))

# case 2 ".append(result)"

mylist = [1,2,3,4,5,6,7,8,9,10]
result = list()
for l in mylist:
    r = foo(l)
    result.append(r)
4

4 に答える 4

3

あなたのアプローチは多かれ少なかれ同等です。オプション2はもう少し作業を行います。一時変数の追加のストアと名前のルックアップを実行する必要があります。実際には、違いは最小限であり、時期尚早の最適化よりもコードの可読性に焦点を当てる必要があります。

特定の例では、リスト内包表記を使用する方がはるかに良いでしょう。

result = [foo(l) for l in mylist]

.append()リスト内包表記はCコードでリストを作成し、ループの反復ごとにメソッドを検索する必要はありません。

于 2013-03-10T17:53:00.443 に答える
2

それらは同じだと思いますが、最良のオプションはmap(foo, mylist)、パフォーマンスの観点からも、appendリストのサイズ変更が発生し、余分な時間がかかる可能性があるためです。

于 2013-03-10T17:51:44.230 に答える
2

一時的な割り当てを削除するだけでパフォーマンスが向上する可能性がありますが、時期尚早の最適化は悪であり、マイクロ最適化は努力する価値がないことを忘れないでください

もちろん、たとえば、より良い方法があります

リスト内包

mylist = [1,2,3,4,5,6,7,8,9,10]
result = [n*2 for n in mylist]
于 2013-03-10T17:53:36.230 に答える
1
result = [foo(i) for i in mylist]

あなたが望むものです。

于 2013-03-10T17:52:50.663 に答える