하나의 배열을 다수의 배열로 나누기. 인접한 정수의 배열로 나누기.
조회수 432회
array([ 57, 58, 59, 60, 61, 78, 79, 80, 81, 82, 83, 101, 102, 103, 104, 105, 106] 이러한 배열을
array([57,58,59,60,61]), ([78,79,80,81,82,83]), ([101,102,103,104,105,106]) 처럼 인접한 값들을 가지는 세 개의 배열로 변환시킬 수 있는 방법이 있을까요?
2 답변
-
>>> l = [ 57, 58, 59, 60, 61, 78, 79, 80, 81, 82, 83, 101, 102, 103, 104, 105, 106] >>> sp = [[]] >>> for i in range(len(l)): if i == len(l) - 1: sp[-1].append(l[i]) break diff = l[i+1] - l[i] sp[-1].append(l[i]) if diff > 1: sp.append([]) >>> sp [[57, 58, 59, 60, 61], [78, 79, 80, 81, 82, 83], [101, 102, 103, 104, 105, 106]] >>>
좀 파이썬스럽지는 않은데, 이렇게 가능하네요.
인덱스를 하나씩 증가시키면서 다음원소와의 차이가 1보다 클 때에, 새로운 리스트에 담을 수 있도록 조작한 겁니다.
-
# shuffled arr = [106, 82, 80, 57, 58, 103, 59, 61, 78, 102, 79, 81, 83, 101, 104, 60, 105, 108] def group_by_adj(list, _range=1): arr = sorted(list) from_idx = 0; for curr in xrange(1, len(arr)): if (arr[curr] - arr[curr-1] > _range): yield arr[from_idx:curr] from_idx = curr yield arr[from_idx:] #test 1 for x in group_by_adj(arr): print(x) #test 2, with _range options print(list(group_by_adj(arr, 17)))
댓글 입력