1. 程式人生 > >【原創】展開二層巢狀列表(或pd.Series)的幾種方法效率對比

【原創】展開二層巢狀列表(或pd.Series)的幾種方法效率對比

轉載請註明出處:https://www.cnblogs.com/oceanicstar/p/10248763.html

★二層巢狀列表(或以列表為元素的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