그리고 for 루프를 돌면서 박쥐와 기존 동물 간의 거리를 구한다. 구한 거리와 동물 정보는distances 리스트에 추가한다. 거리만 저장하면 어느 동물과 가까운지 알 수 없으므로 동물과 거리를 같이 저장한다.

    distances = [ ]
    for animal in zoo:
    
    # 박쥐와 기존 동물 간의 거리를 구한다
        d = euclidean_distance( bat, animal )
    
    # 동물과 거리를 튜플로 묶어 distances 리스트에 같이 저장한다
        distances.append( ( animal, d ) )

    이렇게 모든 거리를 구한 후 거리가 짧은 순서대로 정렬한다.

    distances.sort( key=lambda tup: tup[ 1 ] )

    가장 가까운 이웃 세 개만 고른다(k = 3). 따라서 k만큼만 출력한다.

    k = 3
    for i in range( k ):
        print( distances[ i ] )

    출력하면 결과는 다음과 같다. ( ) 안에 [ ]는 동물을, 숫자는 박쥐와의 거리를 의미한다([ ] 안은 동물의 특성 #1, 특성 #2, 분류다).

    결과

    ( [3.39, 4.4, 0], 0.5586591089385372)
    ( [3.06, 3.0, 0], 1.0017983829094554)
    ( [2.78, 2.55, 0], 1.4665946952038251)

    zoo 데이터를 만들 때 분류가 0이면 포유류, 1이면 조류라고 약속했다. 가장 가까운 동물 셋의 분류가 모두 0, 즉 포유류이므로 박쥐도 포유류일 가능성이 크다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.