ジェネレータとlambdaリストの速度テストについて

1247 ワード

import time
import sys
s = time.time()
x = [i for i in range(0,100000)]
e = time.time()
# print(e-s)  # 0.0029883384704589844
for i in x:
    pass
# print(time.time()-e)  # 0.002991199493408203
print(time.time()-s)  # 0.0059795379638671875


s2 = time.time()
l = (lambda x:i for i in range(100000))
for i in l:
    pass
print(time.time()-s2)  # 0.01596355438232422

s3 = time.time()
l = (i for i in range(100000))
for i in l:
    pass
print(time.time()-s3)  # 0.006981849670410156

s4 = time.time()
for i in range(0, 100000):
    pass
print(time.time()-s4)  # 0.0030264854431152344

#  , ,for , 
#  diss 13, 
# def test():
#     x = [i for i in range(0,100000)]
#     yield x
# s1 = time.time()
# for i in test():
#     pass
# print(time.time()-s1)  # 0.0029921531677246094
#
# def test1():
#     x = (i for i in range(0,100000))
#     yield x
# s2 = time.time()
# for i in test1():
#     pass
# print(time.time()-s2)  # 0.0009975433349609375




ここではいくつかのケースをテストし、反復回数を設定することでrangeが最も速いことがわかりますが、問題はrangeが関数プロシージャの操作を行うことができないことです.ジェネレータとリスト生成式は範囲が小さい場合、リスト生成式はやや速く(無視)、範囲が大きい場合、ジェネレータはメモリの割り当ての問題でリスト生成式より明らかに速度が高くなります.
リスト生成式とジェネレータリストを比較すると、リスト生成式はすべての要素を処理する必要がある場合に空間を考慮せずにジェネレータよりも優れており、リスト生成式はランダムにアクセスできる