목록의 연속 증가 번호 그룹화 [중복]
Nov 24 2020
연속 증가하는 정수를 목록으로 그룹화하려면 어떻게해야합니까? 예를 들어 다음과 같은 정수 목록이 있습니다.
numbers = [0, 5, 8, 3, 4, 6, 1]
다음과 같이 요소를 그룹화하고 싶습니다.
[[0, 5, 8], [3, 4, 6], [1]]
다음 정수는 이전보다 많지만 동일한 중첩 목록에 계속 추가하십시오. 다음 정수가 더 작은 경우 중첩 목록을 기본 목록에 추가하고 다시 시작하십시오.
몇 가지 다른 방법 (while 루프, for 루프, 열거 및 범위)을 시도했지만 다음 정수가 더 큰 한 동일한 중첩 목록에 추가하는 방법을 알아낼 수 없습니다.
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
답변
8 megargayu Nov 24 2020 at 06:37
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) 시간 복잡도 !!
2 piterbarg Nov 24 2020 at 06:46
팬더가 허용되면 다음을 수행합니다.
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]]
1 ppwater Nov 24 2020 at 06:47
다음과 같이 할 수 있습니다.
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 루프를 사용하십시오. 두 번째 결과 및 결과에 추가