하나의 배열을 다수의 배열로 나누기. 인접한 정수의 배열로 나누기.

조회수 429회

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]) 처럼 인접한 값들을 가지는 세 개의 배열로 변환시킬 수 있는 방법이 있을까요?

  • 나누는 기준이 뭔가요? 6개씩 나눈 건 아니고... nowp 2021.2.17 17:17
  • 근접한 값들로 나눠지는 방법을 찾고 있습니다. 최지호 2021.2.17 17:22

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기
    >>> 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보다 클 때에, 새로운 리스트에 담을 수 있도록 조작한 겁니다.

    • 감사합니다! 참고해서 다시 해보도록 하겠습니다!! 최지호 2021.2.17 18:22
  • # 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)))
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)