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

2024-05-16 01:39:36 发布

您现在位置:Python中文网/ 问答频道 /正文

*在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'],
    # ...
]

对于twoDlist中的每个['Number', 'Physician Name', ['stringN']]。你知道吗

提前谢谢!你知道吗


Tags: name元素number列表lentempbobcase
2条回答

给予

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

如果还想删除一级嵌套,可以使用^{}。你知道吗

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

您可以非常简洁地使用reducedocs here)将索引2中字符串列表中的每个字符串的每个记录拆分为多个。在每次迭代中,还可以执行regex替换。你知道吗

举个例子:

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,
    []
)

reducetwoDlist上迭代,twoDlist的每个元素(sublist)被转换成一个列表列表,索引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']
]

相关问题 更多 >