리스트의 각 요소에 대해 인접한 요소(앞뒤 요소)를 확인해야 하는 경우, enumerate와 간단한 반복문을 활용한 메서드를 정의하여 손쉽게 결과를 얻을 수 있습니다.
예제
다음은 리스트의 인접 요소를 찾는 방법을 보여주는 예제입니다.
def find_adjacent_elements(my_list):
my_result = []
for index, ele in enumerate(my_list):
if index == 0:
my_result.append((None, my_list[index + 1]))
elif index == len(my_list) - 1:
my_result.append((my_list[index - 1], None))
else:
my_result.append((my_list[index - 1], my_list[index + 1]))
return my_result
my_list = [13, 37, 58, 12, 41, 25, 48, 19, 23]
print("The list is:")
print(my_list)
print("The result is :")
print(find_adjacent_elements(my_list))출력
The list is: [13, 37, 58, 12, 41, 25, 48, 19, 23] The result is : [(None, 37), (13, 58), (37, 12), (58, 41), (12, 25), (41, 48), (25, 19), (48, 23), (19, None)]
코드 설명
find_adjacent_elements라는 이름의 메서드를 정의하며, 이 메서드는 리스트를 매개변수로 받아 순회합니다.결과를 저장할 빈 리스트를 먼저 생성합니다.
enumerate를 사용해 인덱스와 요소를 함께 순회하면서, 인덱스 값에 따라 결과를 결정합니다.인덱스가 0이라면 현재 요소가 첫 번째 요소이므로, 앞 요소는
None으로 처리하고 뒤 요소만 튜플로 추가합니다.인덱스가 '리스트 길이 - 1'과 같다면 마지막 요소이므로, 앞 요소만 추가하고 뒤 요소는
None으로 처리합니다.그 외의 경우에는 이전 요소와 다음 요소를 모두 튜플 형태로 묶어 추가합니다.
메서드 외부에서 리스트를 정의하고 콘솔에 출력합니다.
완성된 리스트를 매개변수로 전달하여 메서드를 호출합니다.
최종 결과가 콘솔에 출력됩니다.
참고: 리스트 컴프리헨션으로 더 간결하게
동일한 로직을 리스트 컴프리헨션을 사용하면 다음과 같이 더 간결하게 작성할 수도 있습니다.
def find_adjacent_elements(my_list):
return [
(my_list[i - 1] if i > 0 else None,
my_list[i + 1] if i < len(my_list) - 1 else None)
for i in range(len(my_list))
]두 방법 모두 경계에 위치한 첫 번째와 마지막 요소의 경우 존재하지 않는 인접 요소를 None으로 표시한다는 점을 기억하세요. 상황에 따라 반복문 방식이 가독성 면에서 유리할 수 있고, 리스트 컴프리헨션 방식이 코드 길이 면에서 유리할 수 있습니다.