2 回答

TA贡献1783条经验 获得超4个赞
您可以使用reduce(此处的文档)非常简洁地将每个记录拆分为索引 2 处的字符串列表中的每个字符串的多个记录。在每次迭代中,您还可以执行正则表达式替换。
下面是一个例子:
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并且使用列表推导式将每个元素 ( sublist)twoDlist转换为列表列表——索引 2 处的列表的每个元素都对应一个列表。然后将这些新列表全部附加到目前已处理的列表中。
结果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条经验 获得超7个赞
给定的
twoDlist = [['123', 'Dr. Bob', ['string1','string2', 'string3']], ['345', 'Dr. Joe', ['string4', 'string5']]]
你可以发出
>>> [[[*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']]
添加回答
举报