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

时间:2018-12-01 19:30:53

标签: python list

*在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

这就是我将每个列表(SPnumsListrequested_ByListdateTimelist1)中的每个项目附加到较大列表(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 个答案:

答案 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)

您可以使用reducedocs 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遍历twoDlistsublist的每个元素(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']
]