为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

皈依舞 2021-09-02 20:58:26
*在 Windows 上的 Python 3.6.4 上使用 python 3twoDlist = [    [] * 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。先感谢您!
查看完整描述

2 回答

?
慕娘9325324

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']

]


查看完整回答
反对 回复 2021-09-02
?
aluckdog

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']]


查看完整回答
反对 回复 2021-09-02
  • 2 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号