list 묶기 문제
- nested list 형태에서 max_group만큼 묶어서 list로(flatten) 반환하되, 묶은 list가 max_len를 초과할경우 초과하지 않을 때 까지 group을 줄여서 묶음.
- 묶인 list는 다시 활용되지 않음. 다음으로 넘어감.
ideation
lis = [[1,2], [1,3],[3,4,5], [4,5,6,6]]
max_len=4
max_group = 2
def flatten(nest, groups):
return sum(nest[:groups], [])
def pop_n(que,n):
for i in range(n):
if que:
que.popleft()
from collections import deque
def list_grouping(nested_list, max_len, max_group ):
result = []
que = deque(maxlen=max_group)
for li in nested_list:
que.append(li)
if len(que)<max_group:
continue;
sample = flatten(list(que), max_group)
if len(sample)>max_len:
groups = max_group
while len(flatten(list(que), groups))> max_len:
groups-=1
sample = flatten(list(que), groups)
pop_n(que,groups)
else :
pop_n(que,max_group)
result.append(sample)
if que:
residue = flatten(list(que),len(que))
result.append(residue)
return result
list_grouping(lis, max_len, max_group)
>>> [[1, 2, 1, 3], [3, 4, 5], [4, 5, 6, 6]]