Python 将列表中连续递增的数字分组

Python 将列表中连续递增的数字分组,python,Python,如何将列表中连续递增的整数组合在一起?例如,我有以下整数列表: numbers = [0, 5, 8, 3, 4, 6, 1] 我想将元素组合在一起,如下所示: [[0, 5, 8], [3, 4, 6], [1]] 当下一个整数大于上一个整数时,继续添加到同一嵌套列表中;若下一个整数较小,请将嵌套列表添加到主列表中,然后重新开始 我尝试了几种不同的方法(while-loop、for-loop、enumerate和range),但不知道如何使它附加到相同的嵌套列表中,只要下一个整数更大 re

如何将列表中连续递增的整数组合在一起?例如,我有以下整数列表:

numbers = [0, 5, 8, 3, 4, 6, 1]
我想将元素组合在一起,如下所示:

[[0, 5, 8], [3, 4, 6], [1]]
当下一个整数大于上一个整数时,继续添加到同一嵌套列表中;若下一个整数较小,请将嵌套列表添加到主列表中,然后重新开始

我尝试了几种不同的方法(while-loop、for-loop、enumerate和range),但不知道如何使它附加到相同的嵌套列表中,只要下一个整数更大

result = []

while (len(numbers) - 1) != 0:
    group = []

    first = numbers.pop(0)
    second = numbers[0]

    while first < second:
        group.append(first)
        
        if first > second:
            result.append(group)
        break
result=[]
while(len(number)-1)!=0:
组=[]
first=数字。pop(0)
秒=数字[0]
第一次<第二次:
group.append(第一个)
如果第一次>第二次:
结果追加(组)
打破

您可以使用for循环:

numbers = [0, 5, 8, 3, 4, 6, 1]
result = [[]]
last_num = numbers[0] # last number (to check if the next number is greater or equal)
for number in numbers:
    if number < last_num:
        result.append([]) # add a new consecutive list
    result[-1].append(number) 
    last_num = number # set last_num to this number, so it can be used later
print(result)
number=[0,5,8,3,4,6,1]
结果=[]]
last_num=数字[0]#last number(检查下一个数字是否大于或等于)
对于数字中的数字:
如果编号<最后一个编号:
结果。追加([])#添加新的连续列表
结果[-1]。追加(数字)
last_num=number#将last_num设置为该数字,以便以后使用
打印(结果)

注意:这不使用
.pop()
,因此
数字列表保持不变。而且,一个循环=O(N)时间复杂度

如果允许熊猫,我会这样做:

import pandas as pd
numbers = [0, 5, 8, 3, 4, 6, 1]
df = pd.DataFrame({'n':numbers})
[ g['n'].values.tolist() for _,g in df.groupby((df['n'].diff()<0).cumsum())]
您可以这样做:

numbers = [0, 5, 8, 3, 4, 6, 1]
result = []
while len(numbers) != 0:
    secondresult = []
    for _ in range(3):
        if numbers != []:
            toappend = numbers.pop(0)
            secondresult.append(toappend)
        else:
            continue
    result.append(secondresult)
print(result)

使用while和for循环。并将它们附加到secondresult和result中

运行代码时会发生什么?你希望它有什么不同的做法?作为一个行乞的程序员,你应该培养在代码不能正常工作时调试代码的技能,因为无论你成为一个多么熟练的程序员,它在第一次工作时都不会正常工作。若要开始,请阅读有关调试代码的提示。@code学徒。不是真的。有一次,我有一个三行程序可以正常运行。我记得很清楚。为了庆祝,他举行了为期一周的酒会。当然再也没有发生过了。@MadPhysician我夸大了效果。@Code学徒。我也是。酒会只有半个星期。但是似乎更长了:)是的,我同意@Shad0w-而不是使用嵌套循环(这会让人恶心超过O(N)个时间),尝试只使用单个循环来解决它(就像我做的那样!)不会产生预期的结果。“你忘了总是加上数字了!”疯狂的物理学家气喘吁吁地说,“我真不敢相信我居然漏掉了!”!(现在修好了)如果number
,你可以改成
,你不需要
else
子句。@Madman物理学家,你怎么这么擅长发现这些东西呢?好吧,你比我强,所以我想我应该对你的评论而不是发帖:)回答得好,但是你错过了你的投票,因为事实上有两个循环(超过O(N)个时间复杂度!)哦,是的。。好吧,如果有人想要超过O(N)的时间复杂度,那么使用我的答案(但我肯定没有人会想要)
numbers = [0, 5, 8, 3, 4, 6, 1]
result = []
while len(numbers) != 0:
    secondresult = []
    for _ in range(3):
        if numbers != []:
            toappend = numbers.pop(0)
            secondresult.append(toappend)
        else:
            continue
    result.append(secondresult)
print(result)