如何将列表中连续递增的整数分组?例如,我有以下整数列表:
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
您可以使用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)
注意:这不使用.pop()
,因此numbers
列表保持不变。此外,一个循环=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())]
产生
[[0, 5, 8], [3, 4, 6], [1]]
您可以这样做:
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循环。并将它们附加到第二个结果和结果