首页 > 解决方案 > 通过python中的某些特定模式将列表分解为嵌套列表

问题描述

我有下面提到的列表,其中“T0000XXX”是交易ID,“IXXX”是项目列表,这些项目的数量是完全随机的,比如第一个交易有5个项目,第二个有2个项目,第三个同样有9个项目,最后一个元素是项目数量的总和。

这个列表包含 > 100k 个元素

['T0000093', 'I717', 'I491', 'I82', 'I345', 'I423', 2469.0,
 'T0000166', 'I4', 'I425', 3534.0,
 'T0000256', 'I558', 'I325', 'I242', 'I523', 'I568', 'I207', 'I137', 'I15', 'I477', 8467.0]

所以我想将此列表分解为嵌套列表,其中子列表列表将具有 3 个属性、事务 ID、项目数和金额,如下所示

[['T0000093', 'I717', 'I491', 'I82', 'I345', 'I423', 2469.0],
 ['T0000166', 'I4', 'I425', 3534.0],
 ['T0000256', 'I558', 'I325', 'I242', 'I523', 'I568', 'I207', 'I137', 'I15', 'I477', 8467.0]]

标签: pythonlistjupyter-notebook

解决方案


通过理解可能有一种奇特的方法来做到这一点,但我认为最简单的选择是迭代地构建列表:

from typing import List, Union

flat_list: List[Union[str, float]] = ['T0000093', 'I717', 'I491', 'I82', 'I345', 'I423', 2469.0, 'T0000166', 'I4', 'I425', 3534.0, 'T0000256', 'I558', 'I325', 'I242', 'I523', 'I568', 'I207', 'I137', 'I15', 'I477', 8467.0]
nested_list: List[List[Union[str, float]]] = []
sub_list: List[Union[str, float]] = []
for item in flat_list:
    if isinstance(item, str) and item.startswith("T"):
        sub_list = []
        nested_list.append(sub_list)
    sub_list.append(item)

推荐阅读