【原創】展開二層巢狀列表(或pd.Series)的幾種方法效率對比
阿新 • • 發佈:2019-01-10
轉載請註明出處:https://www.cnblogs.com/oceanicstar/p/10248763.html
★二層巢狀列表(或以列表為元素的pd.Series)有以下幾種展開方式 (1)列表生成式 (2)用np.sum方法(將外層列表中各個子列表相加) (3)用sum方法(第二個引數傳入一個空列表) ★但是謹記:對列表慎用sum方法!(以上3個方法只推薦使用第一個!!!) 因為——對於列表,無論是sum方法還是np.sum方法,效率都特別低! 直接用列表生成式,效率高很多!
示例程式碼和結果如下:
★二層巢狀列表(或以列表為元素的pd.Series)有以下幾種展開方式 (1)列表生成式 (2)用np.sum方法(將外層列表中各個子列表相加) (3)用sum方法(第二個引數傳入一個空列表) ★但是謹記:對列表慎用sum方法!(以上3個方法只推薦使用第一個!!!) 因為——對於列表,無論是sum方法還是np.sum方法,效率都特別低! 直接用列表生成式,效率高很多!
import numpy as np
import pandas as pd
import time
sr = pd.Series([list('sdkajksdfdsaf') for _ in range(20000)])
sr.head(5)
>>>
0 [s, d, k, a, j, k, s, d, f, d, s, a, f]
1 [s, d, k, a, j, k, s, d, f, d, s, a, f]
2 [s, d, k, a, j, k, s, d, f, d, s, a, f]
3 [s, d, k, a, j, k, s, d, f, d, s, a, f]
4 [s, d, k, a, j, k, s, d, f, d, s, a, f]
dtype: object
start = time.time()
li1 = [i for k in sr for i in k]
time1 = time.time()
print('用生成式方法需要時間:', time1 - start)
li2 = np.sum(sr)
time2 = time.time()
print('用np.sum方法需要時間:', time2 - time1)
li3 = sum(sr, [])
time3 = time.time()
print('用sum方法需要時間:', time3 - time2)
>>>
用生成式方法需要時間: 0.009999990463256836
用np.sum方法需要時間: 8.989910125732422
用sum方法需要時間: 8.979910373687744