第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

優(yōu)化從字符串列表中生成一個平面列表,每個字符串都可以評估為一個列表

優(yōu)化從字符串列表中生成一個平面列表,每個字符串都可以評估為一個列表

有只小跳蛙 2021-03-29 12:21:31
例如,我將如何最佳地合并:res_str = ['[1,2,3]','[4,5,6]','[7,8,9]','[10,11,12]']for example: ['[{'a': u'中國', 'b': u'美國', 'c': u'日本', 'd': u'德國', 'e': u'法國'},]','[{'a': u'中國', 'b': u'美國', 'c': u'日本', 'd': u'德國', 'e': u'法國'},]',] 進(jìn)入:[1,2,3,4,5,6,7,8,9,10,11,12]我使用了以下代碼,但是速度不夠快:[x for j in res_str for x in eval(j)]  spend time 0.65slist(itertools.chain.from_iterable([eval(i) for i in res_str]))  spend time 0.57s有沒有更好的方法來編寫此代碼?除了發(fā)電機(jī)(x for j in res_str for x in eval(j))另一種方式sum([eval(i) for i in res_str],[]) spend time 3.87s這邊走:import astimport itertoolsl = ['[1,2,3]','[4,5,6]','[7,8,9]','[10,11,12]']l = list(itertools.chain(*map(ast.literal_eval, l)))spend time 0.95s如果使用evallist(itertools.chain(*map(eval, res_str)))spend  time 0.58s這邊走:eval('+'.join('+'.join(arr)))  spend time 3.5s這邊走:import astimport numpy as npres_str = ['[1,2,3]','[4,5,6]','[7,8,9]','[10,11,12]']print(list(np.array([ast.literal_eval(i) for i in res_str]).flatten()))spend time 1s如果使用eval list(np.array([res_str中i的eval(i)))。flatten())花費時間0.58s
查看完整描述

3 回答

?
心有法竹

TA貢獻(xiàn)1866條經(jīng)驗 獲得超5個贊

使用ast和itertools


前任:


import ast

import itertools

l = ['[1,2,3]','[4,5,6]','[7,8,9]','[10,11,12]']

l = list(itertools.chain(*map(ast.literal_eval, l)))

print( l )

輸出:


[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

  • ast.literal_eval 將字符串元素轉(zhuǎn)換為列表對象

  • itertools.chain 整理清單。


查看完整回答
反對 回復(fù) 2021-04-13
?
繁星點點滴滴

TA貢獻(xiàn)1803條經(jīng)驗 獲得超3個贊

您可以嘗試以下簡單方法。


>>> arr

['[1,2,3]', '[4,5,6]', '[7,8,9]', '[10,11,12]']

>>>

>>> '+'.join(arr)

'[1,2,3]+[4,5,6]+[7,8,9]+[10,11,12]'

>>>

>>> eval('+'.join(arr))

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

>>>

另一種使用reduce()和lambda的方法。


>>> import json

>>>

>>> arr = ['[1,2,3]','[4,5,6]','[7,8,9]','[10,11,12]']

>>>

>>> arr2 = reduce(lambda list1, list2: list1 + '+' + list2, arr)

>>>

>>> arr2

'[1,2,3]+[4,5,6]+[7,8,9]+[10,11,12]'

>>>

>>> eval(arr2)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]


查看完整回答
反對 回復(fù) 2021-04-13
?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗 獲得超9個贊

ast.literal_eval+ numpy.flatten:


import ast

import numpy as np

res_str = ['[1,2,3]','[4,5,6]','[7,8,9]','[10,11,12]']

print(list(np.array([ast.literal_eval(i) for i in res_str]).flatten()))

和:


import ast

l = []

res_str = ['[1,2,3]','[4,5,6]','[7,8,9]','[10,11,12]']

for i in res_str:

   l.extend(ast.literal_eval(i))

print(l)


查看完整回答
反對 回復(fù) 2021-04-13
  • 3 回答
  • 0 關(guān)注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號