在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 列表中字符串合并大列表

列表中字符串合并大列表


['[1,2,3]','[4,5,6]','[7,8,9]','[10,11,12]']
合并成一個大列表
[1,2,3,4,5,6,7,8,9,10,11,12]
假設列表的長度為20000,請問如何合并速度更加快
使用列表推導式
[x for j in res_str for x in eval(j)]
速度不是很快

除了生成器還有別的辦法?

回答
編輯回答
愿如初
from itertools import chain


l = ['[1,2,3]','[4,5,6]','[7,8,9]','[10,11,12]']
res = chain(*map(eval, l))
2018年4月3日 10:44
編輯回答
笑浮塵
list_com1 = '[x for j in [str([x for x in range(20000)][i:i+3]) for i in range(0,len([x for x in range(20000)]),3)] for x in eval(j)]'

list_com2 = '''
import json
[x for j in [str([x for x in range(20000)][i:i+3]) for i in range(0,len([x for x in range(20000)]),3)] for x in json.loads(j)]'''

gen_com1 = '(x for j in [str([x for x in range(20000)][i:i+3]) for i in range(0,len([x for x in range(20000)]),3)] for x in eval(j))'

gen_com2 = '''import json
(x for j in [str([x for x in range(20000)][i:i+3]) for i in range(0,len([x for x in range(20000)]),3)] for x in json.loads(j))'''


import timeit

print(timeit.timeit(stmt=list_com1, number=1))
print(timeit.timeit(stmt=list_com2, number=1))
print(timeit.timeit(stmt=gen_com1, number=1))
print(timeit.timeit(stmt=gen_com2, number=1))

圖片描述

如圖所示,我們可以得出如下結論:

  1. 生成器要比列表推導快一些。
  2. eval() 要比 json.loads() 快些。

其實,這個 timeit 測試速度比較慢的原因,是我們生成 20000 個如題主所示的列表的時候,占用了過多的時間和內(nèi)存。

2017年3月31日 09:00