2차원 파이선 내부의 1차원 행렬 조작

조회수 1422회

다름이 아니라 파이선으로 클러스터링 하는 코드를 짜고 있습니다.
일단 초기 데이터가

a=[1,2,13,14,16,25,54,68,88,94,101,110,114,122,132,165,170]

이렇게 보여진다고 가정하고 군집화 코드를 작성하였습니다.

군집화 코드는 데이터 행렬과 최대 거리를 파라미터로 받아,
먼약 최대 거리 허용가능한 최대거리가 10이라 가정하면,
두 원소사이 거리가 10 이하일경우, 같은 array에 속하게 코딩을 했습니다.

위 예시의 결과는 다음과 같은 2차원 array로 표시됩니다.

[[1,2],[13,14,16,25],[54],[68],[88,94,101,110,114,122,132],[165,170]]

여기서 제가 하고자 하는것은
[54], [68]와 같은 길이가 1인 내부의 데이터를 제거하여
다음과 같은 결과를 얻고자 합니다

[[1,2],[13,14,16,25],[88,94,101,110,114,122,132],[165,170]]

이렇게 할려면 대충 a.pop을 써야겠다는 생각은 드는데..;
원하는 결과는 나오질 않습니다.

th = 10
g=[[a[0]]]
for i in a[1:] :
    if abs(i - g[-1][-1]) <= th:
        g[-1].append(i)
    else:
        g.append([i])
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 원소 길이가 1개 이상인 리스트만 모아두는 새로운 리스트를 만드세요.

    clustered = [[1,2],[13,14,16,25],[54],[68],[88,94,101,110,114,122,132],[165,170]]
    removed = []
    for ls in clustered:
      if len(ls) > 1:
        removed.append(ls)
    
    # removed = [[1, 2], [13, 14, 16, 25], [88, 94, 101, 110, 114, 122, 132], [165, 170]]
    
    
    clustered = [[1,2],[13,14,16,25],[54],[68],[88,94,101,110,114,122,132],[165,170]]
    removed = [ls for ls in clustered if len(ls) > 1]
    
    # removed = [[1, 2], [13, 14, 16, 25], [88, 94, 101, 110, 114, 122, 132], [165, 170]]
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)