python - 通过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]]
解决方案
通过理解可能有一种奇特的方法来做到这一点,但我认为最简单的选择是迭代地构建列表:
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)
推荐阅读
- php - 如何使用laravel在if条件下获取所有记录
- python - 在 SVG pandas_bokeh 上更改地图上点的外观
- html - 如何使用 Bootstrap Flex 设置 CSS3 flex-basis 属性?
- powerbi - 使用Measures模拟计算列时如何使钻取正常工作
- android - Action(Click) 正在使用 NavigationView(Navigation Drawer) 实现布局 xml 文件
- sql - 如何仅从所有间隔都有值的地方进行选择?
- java - Swing 的 KeyStroke.getKeyStroke() 返回 UNKNOWN
- excel - 如果满足条件,如何将范围从多张纸复制到一张纸(另一个范围下的一个范围)?
- android - FirebaseMessaging:找不到启动应用程序的活动
- php - 身份不明的 PHP 和 PDO 执行时间长