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

파이썬으로 리스트에서 모든 y가 x 이후에 나타나는지 확인하는 방법

리스트 안에서 모든 'y' 요소가 'x'보다 뒤에 위치하는지 확인해야 하는 경우가 종종 있습니다. 예를 들어, 데이터의 순서 규칙을 검증하거나 특정 조건을 만족하는지 점검할 때 유용합니다. 이럴 때 파이썬의 enumerate 함수와 조건문을 함께 사용하면 간단하게 해결할 수 있습니다.

동작 원리

핵심 아이디어는 다음과 같습니다. 먼저 'x'의 인덱스 위치를 구한 뒤, 리스트를 순회하면서 'y'가 발견될 때마다 그 인덱스가 'x'의 인덱스보다 앞인지 확인합니다. 만약 'x'보다 앞에 있는 'y'가 하나라도 존재한다면 조건을 만족하지 않는 것으로 판단합니다.

예제 코드

아래는 전체 동작 과정을 보여주는 예제입니다.

my_list = [11, 25, 13, 11, 64, 25, 8, 9]

print("The list is :")
print(my_list)

x, y = 13, 8

x_index = my_list.index(x)

my_result = True
for index, element in enumerate(my_list):

   if element == y and index < x_index:
      my_result = False
      break

if(my_result == True):
   print("All y elements occcur after x elements")
else:
   print("All y elements don't occcur after x elements")

실행 결과

The list is :
[11, 25, 13, 11, 64, 25, 8, 9]
All y elements occcur after x elements

코드 단계별 설명

  • 정수 값들을 담은 리스트를 정의하고 콘솔에 출력합니다.

  • 비교 대상이 될 두 정수 변수 xy를 초기화합니다.

  • index() 메서드를 사용해 리스트에서 'x'의 인덱스 위치를 구해 변수에 저장합니다.

  • 결과를 저장할 임시 변수를 Boolean 값 True로 초기화합니다.

  • enumerate를 사용해 리스트의 요소와 인덱스를 동시에 순회합니다.

  • 순회 중인 요소가 'y'와 같으면서, 해당 인덱스가 'x'의 인덱스보다 작다면 조건이 깨진 것이므로 임시 변수를 False로 변경합니다.

  • break 문으로 루프를 즉시 빠져나와 불필요한 반복을 줄입니다.

  • 마지막으로 임시 변수의 값에 따라 적절한 결과 메시지를 콘솔에 출력합니다.

더 간결한 대안: all() 함수 활용

위 로직은 all() 함수와 제너레이터 표현식을 사용하면 한 줄로도 작성할 수 있습니다.

x_index = my_list.index(x)

my_result = all(
    index > x_index
    for index, element in enumerate(my_list)
    if element == y
)

all() 함수는 제너레이터가 생성하는 모든 값이 True일 때만 True를 반환하므로, 'y' 중 하나라도 'x'보다 앞에 있으면 자동으로 False가 됩니다. 또한 'y'가 리스트에 존재하지 않는 경우에는 빈 시퀀스에 대해 True를 반환하므로, "모든 y가 x 이후에 있다"는 명제가 공집합에서도 성립한다는 수학적 관례와 일치합니다.

마무리

이처럼 enumerate와 조건문의 조합만으로도 리스트 내 요소들의 상대적 위치를 손쉽게 검증할 수 있습니다. 코드 가독성을 높이고 싶다면 all() 기반의 대안을, 디버깅이나 단계별 추적이 필요하다면 명시적인 for 루프 방식을 선택하면 좋습니다.