pythonでリストのデータをすばやくフィルタする方法

1288 ワード

実際のテストを経て、使用方法2を推奨します.時間が短くて、値を取るのが便利です.
方法1:for in遍歴
最も時間がかかり(メソッドの約2、3の3倍)、スペースの占有量が少ない(新しいオブジェクトは生成されません).
方法2:リスト生成式
短い時間で新しいリストを生成します.
方法3:拡張関数:filter(function,iterable)
時間がかかり、filterオブジェクトに戻ります.値を取るには__next()__関数が必要です.値を取った後、__next__()メソッドを呼び出すとエラーが発生します.
テストコード:
import time

list1 = [1,2,3,4,5,6,7,8,9]
t1 = time.time()
#    
for i in list1:
    if i % 2 == 0:
        list1.remove(i)
print(list1)
t2 = time.time()
print(t2 - t1)

print('-' * 30)

list1 = [1,2,3,4,5,6,7,8,9]
t1 = time.time()
#    
list2 = [i for i in list1 if i % 2 == 0]
print(list1)
print(list2)
t2 = time.time()
print(t2 - t1)

print('-' * 30)

list1 = [1,2,3,4,5,6,7,8,9]
t1 = time.time()
#    
list2 = filter(lambda x:x%2==0, list1)
print(list1)
print(list2.__next__())
print(list2.__next__())
print(list2.__next__())
print(list2.__next__())
t2 = time.time()
print(t2 - t1)

出力内容:
   : [1, 3, 5, 7, 9]
     : 3.4332275390625e-05
------------------------------
   : [1, 2, 3, 4, 5, 6, 7, 8, 9]
   : [2, 4, 6, 8]
     : 1.1444091796875e-05
------------------------------
   : [1, 2, 3, 4, 5, 6, 7, 8, 9]
 filter  : 
2
4
6
8
     : 1.2159347534179688e-05