如何根据列表之一中的元素之一的起始字符将列表列表分组为新列表

问题描述 投票:0回答:2

我有一个名为“行”的列表列表,如下所示:

[['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
['REF', '0F', '708066255'],
['REF', '1L', '708066255'],
['DTP', '303', 'D8', '20240901'],
['DTP', '356', 'D8', '20240801'],
['NM1', 'IL', '1', 'FIGUEROA', 'LILIET', '', '', '', '34', '536899858'],
['N3', '2670 SO A W GRIMES BO', '#6102'],
['N4', 'ROUND ROCK', 'TX', '786642849', '', 'CY', '246'],
['DMG', 'D8', '19931219', 'F', '', 'H'],
['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
['REF', '0F', '811229070'],
['REF', '1L', '811229070'],
['DTP', '303', 'D8', '20240901'],
['DTP', '356', 'D8', '20240201'],
['NM1', 'IL', '1', 'MORILLO RUZA', 'OMARLY', 'V', '', '', '34', '000000000'],
['PER', 'IP', '', 'HP', '5129233526'],
['N3', '154 TERRI TL'],
['N4', 'ELGIN', 'TX', '786218937', '', 'CY', '011'],
['DMG', 'D8', '20040628', 'F', '', 'H']]

我需要的是将列表分组到新列表中,只要“INS”元素出现在列表之一中。 输出应如下所示:

[[['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
['REF', '0F', '708066255'],
['REF', '1L', '708066255'],
['DTP', '303', 'D8', '20240901'],
['DTP', '356', 'D8', '20240801'],
['NM1', 'IL', '1', 'FIGUEROA', 'LILIET', '', '', '', '34', '536899858'],
['N3', '2670 SO A W GRIMES BO', '#6102'],
['N4', 'ROUND ROCK', 'TX', '786642849', '', 'CY', '246'],
['DMG', 'D8', '19931219', 'F', '', 'H']],
[['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
['REF', '0F', '811229070'],
['REF', '1L', '811229070'],
['DTP', '303', 'D8', '20240901'],
['DTP', '356', 'D8', '20240201'],
['NM1', 'IL', '1', 'MORILLO RUZA', 'OMARLY', 'V', '', '', '34', '000000000'],
['PER', 'IP', '', 'HP', '5129233526'],
['N3', '154 TERRI TL'],
['N4', 'ELGIN', 'TX', '786218937', '', 'CY', '011'],
['DMG', 'D8', '20040628', 'F', '', 'H']]]

我不确定该怎么做

python list
2个回答
0
投票

一个简单的循环应该可以工作:

new_list=[]
# data is the original list
for sublist in data:
    if sublist[0] == "INS": new_list.append([])
    new_list[-1].append(sublist)

0
投票

遍历初始列表,检查第一个元素是否为 INS,并根据该结构获得最终输出

下面是例子

>>> x
[['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'], ['REF', '0F', '708066255'], ['REF', '1L', '708066255'], ['DTP', '303', 'D8', '20240901'], ['DTP', '356', 'D8', '20240801'], ['NM1', 'IL', '1', 'FIGUEROA', 'LILIET', '', '', '', '34', '536899858'], ['N3', '2670 SO A W GRIMES BO', '#6102'], ['N4', 'ROUND ROCK', 'TX', '786642849', '', 'CY', '246'], ['DMG', 'D8', '19931219', 'F', '', 'H'], ['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'], ['REF', '0F', '811229070'], ['REF', '1L', '811229070'], ['DTP', '303', 'D8', '20240901'], ['DTP', '356', 'D8', '20240201'], ['NM1', 'IL', '1', 'MORILLO RUZA', 'OMARLY', 'V', '', '', '34', '000000000'], ['PER', 'IP', '', 'HP', '5129233526'], ['N3', '154 TERRI TL'], ['N4', 'ELGIN', 'TX', '786218937', '', 'CY', '011'], ['DMG', 'D8', '20040628', 'F', '', 'H']]
>>>
>>>
>>>
>>>
>>> sol = []
>>> tmp = []
>>> for i in x:
...     if i[0]!="INS":
...             tmp.append(i)
...     else:
...             if tmp:
...                     sol.append(tmp)
...             tmp = [i]
...
>>> if tmp:
...     sol.append(tmp)
...
>>> sol
[[['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'], ['REF', '0F', '708066255'], ['REF', '1L', '708066255'], ['DTP', '303', 'D8', '20240901'], ['DTP', '356', 'D8', '20240801'], ['NM1', 'IL', '1', 'FIGUEROA', 'LILIET', '', '', '', '34', '536899858'], ['N3', '2670 SO A W GRIMES BO', '#6102'], ['N4', 'ROUND ROCK', 'TX', '786642849', '', 'CY', '246'], ['DMG', 'D8', '19931219', 'F', '', 'H']], [['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'], ['REF', '0F', '811229070'], ['REF', '1L', '811229070'], ['DTP', '303', 'D8', '20240901'], ['DTP', '356', 'D8', '20240201'], ['NM1', 'IL', '1', 'MORILLO RUZA', 'OMARLY', 'V', '', '', '34', '000000000'], ['PER', 'IP', '', 'HP', '5129233526'], ['N3', '154 TERRI TL'], ['N4', 'ELGIN', 'TX', '786218937', '', 'CY', '011'], ['DMG', 'D8', '20040628', 'F', '', 'H']]]
© www.soinside.com 2019 - 2024. All rights reserved.