Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python – 리스트에서 두 요소 사이의 가장 가까운 발생 위치 찾기

리스트 안에 있는 두 요소(x, y) 중 서로 가장 가까운 위치를 찾아야 할 때가 있습니다. 이럴 때는 세 개의 매개변수를 받는 함수를 정의하고, not in 연산자와 리스트 컴프리헨션(list comprehension)을 활용하면 간단하게 결과를 구할 수 있습니다.


아래에서 실제 동작 과정을 살펴보겠습니다.


예제 코드

def nearest_occurence_list(my_list, x, y):
    if x not in my_list or y not in my_list:
        return -1
    x_index = [index for index in range(len(my_list)) if my_list[index] == x]
    y_index = my_list.index(y)
    min_dist = 1000000
    result = None
    for element in x_index:
        if abs(element - y_index) < min_dist:
            result = element
            min_dist = abs(element - y_index)
    return result

my_list = [12, 24, 15, 17, 28, 26, 13, 28, 14, 12, 20, 19, 24, 29, 14]
print("The list is :")
print(my_list)

x = 14
print("The value of x is ")
print(x)

y = 26
print("The value of y is ")
print(y)

print("The result is :")
print(nearest_occurence_list(my_list, x, y))

실행 결과

The list is :
[12, 24, 15, 17, 28, 26, 13, 28, 14, 12, 20, 19, 24, 29, 14]
The value of x is
14
The value of y is
26
The result is :
8

코드 설명

  • nearest_occurence_list라는 이름의 메서드가 정의되며, 리스트와 비교할 두 값(x, y)까지 총 세 개의 매개변수를 받습니다.

  • not in 연산자로 x 또는 y가 리스트에 존재하지 않는지 먼저 확인하고, 없다면 -1을 반환합니다.

  • 리스트 컴프리헨션을 사용해 리스트를 순회하면서 x와 값이 일치하는 모든 인덱스를 수집합니다.

  • 수집된 인덱스 목록은 변수에 저장되어 이후 비교에 사용됩니다.

  • y의 첫 번째 인덱스는 index() 메서드를 통해 구합니다.

  • x의 인덱스 목록을 하나씩 순회하면서, 각 인덱스와 y의 인덱스 사이의 절댓값 거리를 계산합니다.

  • 계산된 거리가 기존 최솟값보다 작으면 해당 인덱스를 결과로 저장하고 최솟값을 갱신합니다.

  • 모든 순회가 끝나면 y의 위치에서 가장 가까운 x의 인덱스가 반환됩니다.

  • 메서드 외부에서는 예제용 리스트를 정의하고 콘솔에 출력합니다.

  • x와 y에 사용할 값(각각 14와 26)을 정의한 뒤 콘솔에 출력합니다.

  • 필요한 매개변수를 전달하여 메서드를 호출하고 그 결과를 출력합니다.

  • 이 예제에서 26은 인덱스 5에 있고, 14는 인덱스 8과 14에 있습니다. 이 중 인덱스 8이 더 가깝기 때문에 최종 결과로 8이 출력됩니다.