*在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
。
提前谢谢!
答案 0 :(得分:0)
给出
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']]
答案 1 :(得分:0)
您可以使用reduce
(docs here)十分简洁地将索引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']
]