python - 列表多次升序 - 拆分为单个列表
问题描述
对于以下列表:
races=['R1', 'R2', 'R3', 'R4', 'R1', 'R2', 'R1', 'R2', 'R3', 'R4', 'R5']
我想把它分为:
list_1=['R1', 'R2', 'R3', 'R4']
list_2=['R1', 'R2']
list_3=['R1', 'R2', 'R3', 'R4', 'R5']
所以 - 在使用列表推导时,只要“R”数字开始下降,就会开始一个新列表。我对 list_1 的尝试是:
list_1=[i for i in races if int(i.split('R')[1])>int((i-1).split('R')[1])]
这不太行 - 加上如何处理 list_2 和 list_3?
解决方案
如果您尝试使用列表推导,您将使其变得更加复杂。显式循环实现了一个简单的解决方案:
races = ['R1', 'R2', 'R3', 'R4', 'R1', 'R2', 'R1', 'R2', 'R3', 'R4', 'R5']
out = []
for r in races:
if not out or r < out[-1][-1]:
out.append([])
out[-1].append(r)
print(out)
给出:
[['R1', 'R2', 'R3', 'R4'], ['R1', 'R2'], ['R1', 'R2', 'R3', 'R4', 'R5']]
请注意,实际拆分为单个变量需要执行一些“hacky”操作(例如使用globals
or exec
)。将输出保存在集合中,如本示例所示,并根据需要进行索引。
但是,在输出变量的数量已知的特殊情况下,您可以将其解压缩:
list_1, list_2, list_3 = out
推荐阅读
- javascript - 检查滚动是否在孩子的区域
- javascript - 如何拆分字符串并创建一个数组?
- javascript - 如何防止在单击事件上触发两个相同的 useState 挂钩
- javascript - 检测 Angular 何时加载。根据您可以加载或不加载 Angular 的设备
- c - 终止具有临界区代码的 POSIX 多线程应用程序的最佳方法是什么?
- c# - ReactJS 如何与 ASP.NET MVC 交互
- javascript - 在一个数据库中同时在另一个数据库中正常工作时,无法解释来自查询结果的 JSON 输入
- wordpress - 在 WordPress 上集成 Google Speech-to-Text
- yaml - [OpenAPI 3]根据枚举选择加载不同的模式
- php - 在 Laravel 7.6 中遇到 Bootstrap 脚手架问题