2 回答

TA貢獻1783條經(jīng)驗 獲得超4個贊
您可以使用reduce(此處的文檔)非常簡潔地將每個記錄拆分為索引 2 處的字符串列表中的每個字符串的多個記錄。在每次迭代中,您還可以執(zhí)行正則表達式替換。
下面是一個例子:
import re
from functools import reduce
twoDlist = [
['123', 'Dr. Bob', ['string1','string2', 'string3']],
['456', 'Dr. Jim', ['string4','string5', 'string6']],
]
regex = r'[A-Za-z.\'\"\,\n;:]'
final = reduce(
lambda a, sublist: a + [[*sublist[:2], re.sub(regex, "", st)] for st in sublist[2]],
twoDlist,
[]
)
reduce迭代twoDlist并且使用列表推導(dǎo)式將每個元素 ( sublist)twoDlist轉(zhuǎn)換為列表列表——索引 2 處的列表的每個元素都對應(yīng)一個列表。然后將這些新列表全部附加到目前已處理的列表中。
結(jié)果final如下:
[
['123', 'Dr. Bob', '1'],
['123', 'Dr. Bob', '2'],
['123', 'Dr. Bob', '3'],
['456', 'Dr. Jim', '4'],
['456', 'Dr. Jim', '5'],
['456', 'Dr. Jim', '6']
]

TA貢獻1847條經(jīng)驗 獲得超7個贊
給定的
twoDlist = [['123', 'Dr. Bob', ['string1','string2', 'string3']], ['345', 'Dr. Joe', ['string4', 'string5']]]
你可以發(fā)出
>>> [[[*sub[:-1], x] for x in sub[-1]] for sub in twoDlist]
[[['123', 'Dr. Bob', 'string1'],
['123', 'Dr. Bob', 'string2'],
['123', 'Dr. Bob', 'string3']],
[['345', 'Dr. Joe', 'string4'],
['345', 'Dr. Joe', 'string5']]]
如果您還想刪除一層嵌套,您可以使用itertools.chain.from_iterable.
>>> tmp = ([[*sub[:-1], x] for x in sub[-1]] for sub in twoDlist)
>>> list(chain.from_iterable(tmp))
[['123', 'Dr. Bob', 'string1'],
['123', 'Dr. Bob', 'string2'],
['123', 'Dr. Bob', 'string3'],
['345', 'Dr. Joe', 'string4'],
['345', 'Dr. Joe', 'string5']]
添加回答
舉報