リスト内包表記って,速くもなんともないようです。むしろ遅い。
「1行で簡単に書ける」なんて言葉にだまされて,計算時間が掛かってしまっては本末転倒です。
一重ループ
def a1(n):
s = 0
for i in range(1, n+1):
s += 1/i
return s
def b1(n):
return sum([ 1 / i for i in range(1, n+1)])
Python n=10**6 n=10**7 n=10**8 n=10**9
a1 0.080 0.840 8.395 83.437
b1 0.104 1.030 10.314 1103.242
n=10**9 のときの b1 は,ガーベージ・コレクションでもが働いているのか?,計算時間が不定
二重ループ
def a2(n):
s = 0
for i in range(1, n+1):
for j in range(1, n+1):
s += i/j
return s
def b2(n):
return sum([ i / j for i in range(1, n+1) for j in range(1, n+1)])
Python n=10**3 n=10**4 n=10**5 n=10**6
a2 0.081 8.217
b2 0.099 10.172
n が 10**5 以上では,これまたガーベージ・コレクションの影響か,終わりそうにないので中止