猿问

操作列表中、列表中、列表中的每个项目(字符串)

*在 Windows 上的 Python 3.6.4 上使用 python 3


twoDlist = [

    [] * len(pathology_case_retrieval_report[1:])

    for x in range(len(pathology_case_retrieval_report[1:]))

]

这是我的长度为 67 的列表。


for i in range(len(twoDlist)):

    temp = twoDlist[i]

    temp.append(SPnumsList[i])

    temp.append(requested_ByList[i])

    temp.append(dateTimelist1[i])

    twoDlist[i] = temp

这就是我将每个列表 ( SPnumsList,requested_ByList和dateTimelist1) 中的每个项目附加到较大列表 ( twoDlist)内的每个列表的方式。


twoDlist 中的示例元素:


['Number', 'Physician Name', ['stringN']]

*请注意,此列表的第二个索引可以包含 0 到 n 个元素,我想对此进行说明。


我需要执行字符串操作(通过正则表达式对第二个索引中的每个元素(特别是re.sub(r'[A-Za-z.\'\"\,\n;:]', '', stringN))。然后将新项目附加回列表的第二个索引,替换旧字符串。


我还想:将每个stringN元素放入


['123', 'Dr. Bob', ['string1','string2', 'string3']]

并将其附加到新列表中,同时保留'Number'和'Physician Name'。


我希望我的数据看起来像的示例:


[

    ['123', 'Dr. Bob', 'string1'],

    ['123', 'Dr. Bob', 'string2'],

    ['123', 'Dr. Bob', 'string3'],

    # ...

]

每个['Number', 'Physician Name', ['stringN']]在twoDlist。


先感谢您!


皈依舞
浏览 190回答 2
2回答

慕娘9325324

您可以使用reduce(此处的文档)非常简洁地将每个记录拆分为索引 2 处的字符串列表中的每个字符串的多个记录。在每次迭代中,您还可以执行正则表达式替换。下面是一个例子:import refrom functools import reducetwoDlist = [    ['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']]

aluckdog

给定的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']]
随时随地看视频慕课网APP

相关分类

Python
我要回答