배열(리스트) 안에 특정 숫자와 그 숫자의 두 배에 해당하는 값이 동시에 존재하는지 확인해야 하는 경우가 있습니다. 이때는 리스트를 반복(iteration)하면서 각 요소에 2를 곱한 뒤, 해당 값이 리스트 안에 있는지 검사하면 됩니다.
예제 코드
아래는 이를 구현한 예제입니다.
def check_double_exists(my_list):
for i in range(len(my_list)):
for j in (my_list[:i]+my_list[i+1:]):
if 2*my_list[i] == j:
print("두 배 값이 존재합니다")
my_list = [67, 34, 89, 67, 90, 17, 23]
print("리스트 :")
print(my_list)
check_double_exists(my_list)실행 결과
리스트 : [67, 34, 89, 67, 90, 17, 23] 두 배 값이 존재합니다
코드 설명
먼저 check_double_exists라는 이름의 함수를 정의하고, 리스트를 매개변수로 전달받습니다.
함수 내부에서는 리스트를 순회하면서 각 요소에 2를 곱한 값이 나머지 요소 중에 존재하는지 확인합니다.
이때
my_list[:i] + my_list[i+1:]슬라이싱 기법을 사용해 현재 검사 중인 요소 자기 자신은 비교 대상에서 제외합니다.두 배에 해당하는 값을 찾으면 관련 메시지를 출력합니다.
함수 외부에서는 리스트를 하나 정의하고, 콘솔에 출력합니다.
마지막으로 정의된 함수를 호출하면서 리스트를 인자로 전달하고, 결과가 콘솔에 표시됩니다.
참고: 더 효율적인 방법
위 방식은 이중 반복문을 사용하기 때문에 시간 복잡도가 O(n²)입니다. 리스트가 클 경우에는 집합(set)을 활용하면 O(n)으로 최적화할 수 있습니다.
def check_double_exists_fast(my_list):
seen = set()
for num in my_list:
if num * 2 in seen or (num % 2 == 0 and num // 2 in seen):
return True
seen.add(num)
return False이처럼 파이썬에서는 간단한 반복문부터 집합 자료구조까지 다양한 방법으로 문제를 해결할 수 있습니다.