Python 多次升序列表-拆分为单个列表

Python 多次升序列表-拆分为单个列表,python,list,list-comprehension,Python,List,List Comprehension,有关以下列表: 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”数字开始下降,一个新的列表就会开始。 我对列表_1的尝试是: list_1=[i for i in ra

有关以下列表:

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”数字开始下降,一个新的列表就会开始。 我对列表_1的尝试是:

list_1=[i for i in races if int(i.split('R')[1])>int((i-1).split('R')[1])]

这不太管用-加上如何处理列表2和列表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)
请注意,实际拆分为单个变量需要执行一些黑客操作,例如使用globals或exec。如本例所示,将输出保存在集合中,并根据需要进行索引

但是,在输出变量数量已知的特殊情况下,您可以将其解包:

list_1, list_2, list_3 = out

我想答案的一部分包含在Alani中——非常感谢。所以-在第一次通过这个循环时:r=R1和out[-1][-1]=在“out”列表中什么都没有…….对:rlist_1, list_2, list_3 = out