Python 리스트에서 특정 항목을 어떻게 찾을 수 있을까요? Python 개발자라면 누구나 한 번쯤 마주치는 질문입니다. 다행히 Python은 in 연산자나 선형 탐색(linear search) 등 다양한 방법으로 리스트에서 원하는 항목을 찾을 수 있도록 지원합니다.
이 글에서는 리스트에서 항목을 찾는 네 가지 방법을 소개하고, 각 방법이 실제로 어떻게 동작하는지 예제와 함께 자세히 살펴보겠습니다.
1. "in" 연산자로 리스트에서 항목 찾기
Python에는 in이라는 특별한 연산자가 있습니다. 이 연산자는 특정 값이 리스트에 존재하는지 확인하며, 값이 리스트의 '멤버'인지 검사한다고 해서 '멤버십 연산자(membership operator)'라고도 불립니다.
예를 들어 신발 매장을 운영하고 있고, 특정 신발이 재고에 있는지 확인하고 싶다고 가정해 보겠습니다. 이때 in 연산자를 활용할 수 있습니다.
먼저 신발 목록을 정의합니다:
shoes = ["Adidas ZX Flux", "Adidas Ultraboost", "Adidas Gazelle", "Adidas Runfalcon"]
다음으로 사용자에게 찾고 싶은 신발 이름을 입력받습니다:
to_find = input("어떤 신발을 찾으시나요? ")input() 함수로 신발 이름을 수집한 뒤, if 문을 사용해 입력된 신발이 리스트에 있는지 확인합니다:
if to_find in shoes:
print("{} 신발이 재고에 있습니다.".format(to_find))
else:
print("{} 신발은 재고에 없습니다.".format(to_find))사용자가 입력한 신발이 리스트에 존재하면 if 문이 실행되고, 그렇지 않으면 else 문이 실행됩니다. 코드를 직접 실행해 보겠습니다:
어떤 신발을 찾으시나요? Adidas Runfalcon Adidas Runfalcon 신발이 재고에 있습니다.
코드가 성공적으로 'Adidas Runfalcon' 신발이 재고에 있음을 확인했고, 그 결과 if 문이 실행된 것입니다.
2. 선형 탐색(Linear Search)으로 항목 찾기
선형 탐색은 리스트에서 항목을 찾는 간단한 탐색 알고리즘입니다. 리스트의 한쪽 끝부터 시작해 값을 리스트의 모든 요소와 하나씩 비교하며, 값을 찾으면 해당 항목의 위치(인덱스)를 반환합니다.
먼저 선형 탐색을 수행하는 함수를 작성해 보겠습니다:
def linear_search(array, to_find): for i in range(0, len(array)): if array[i] == to_find: return i return -1
이 코드는 for 루프를 사용해 'array' 리스트의 모든 항목을 순회합니다. 항목을 찾으면 해당 인덱스를 메인 프로그램에 반환하고, 리스트 전체를 검색한 후에도 찾지 못하면 -1을 반환합니다.
이제 메인 프로그램에서 함수를 호출해 보겠습니다:
shoes = ["Adidas ZX Flux", "Adidas Ultraboost", "Adidas Gazelle", "Adidas Runfalcon"]
to_find = input("어떤 신발을 찾으시나요? ")
found = linear_search(shoes, to_find)이 코드는 사용자에게 찾고 싶은 신발을 입력받은 뒤, linear_search 함수를 호출해 해당 신발이 리스트에 있는지 확인합니다.
마지막으로 if 문을 사용해 신발을 찾았는지 여부를 사용자에게 알려줍니다:
if found != -1:
print("{} 신발이 재고에 있습니다.".format(to_find))
else:
print("{} 신발은 재고에 없습니다.".format(to_find))linear_search 함수가 -1을 반환했다면 리스트에서 항목을 찾지 못했다는 의미입니다. 반환값이 -1이 아니면 if 문이 실행되고, -1이면 else 문이 실행됩니다.
코드를 실행해 결과를 확인해 보겠습니다:
어떤 신발을 찾으시나요? Adidas Samba Adidas Samba 신발은 재고에 없습니다.
리스트에 Adidas Samba 신발이 없기 때문에 코드가 이를 정확히 찾지 못하고 알려준 것입니다.
3. index() 메서드로 항목 찾기
내장 함수인 index()를 사용하면 리스트에서 특정 항목의 인덱스 위치를 찾을 수 있습니다. index()를 활용해 신발이 리스트의 어디에 있는지 찾는 프로그램을 작성해 보겠습니다.
먼저 신발 목록을 정의하고, 사용자에게 검색할 신발 이름을 입력받습니다:
shoes = ["Adidas ZX Flux", "Adidas Ultraboost", "Adidas Gazelle", "Adidas Runfalcon"]
to_find = input("어떤 신발을 찾으시나요? ")다음으로 index() 메서드를 사용해 해당 신발의 리스트 내 인덱스 위치를 반환합니다:
try:
found = shoes.index(to_find)
print("{} 신발이 재고에 있습니다. 신발 목록의 {}번째 인덱스에 위치합니다.".format(to_find, found))
except:
print("{} 신발은 재고에 없습니다.".format(to_find))index() 메서드는 항목을 찾지 못하면 ValueError를 발생시킵니다. 그래서 'try…except' 블록 안에서 사용해야 합니다.
신발을 찾지 못하면 ValueError가 발생하고 'except' 블록이 실행됩니다. 반대로 신발을 찾으면 'try' 블록이 정상적으로 실행됩니다.
코드를 실행해 보겠습니다:
어떤 신발을 찾으시나요? Adidas Gazelle Adidas Gazelle 신발이 재고에 있습니다. 신발 목록의 2번째 인덱스에 위치합니다.
코드가 Adidas Gazelle 신발이 재고에 있음을 성공적으로 확인했을 뿐만 아니라, 해당 신발이 리스트의 어느 위치에 저장되어 있는지도 알려주었습니다.
4. 리스트 컴프리헨션(List Comprehension)으로 항목 찾기
리스트 컴프리헨션을 사용하면 특정 조건을 만족하는 여러 항목을 한 번에 찾을 수 있습니다.
예를 들어 신발 목록에서 Nike 브랜드 제품만 골라내고 싶다고 가정해 보겠습니다. 먼저 신발 목록을 정의합니다:
shoes = ["Nike PG 4", "Adidas Ultraboost", "Adidas Gazelle", "Nike Air Max Verona"]
다음으로 'Nike'라는 단어가 포함된 모든 신발을 가져오는 리스트 컴프리헨션을 작성합니다. 리스트 컴프리헨션은 for 루프와 유사한 문법을 사용합니다:
nike_shoes = [shoe for shoe in shoes if "Nike" in shoe] print(nike_shoes)
이 표현식은 'shoes' 리스트의 모든 신발을 순회하며, 각 신발 이름에 'Nike'가 포함되어 있는지 확인합니다. 포함되어 있다면 해당 신발을 'nike_shoes' 리스트에 추가하고, 그렇지 않으면 아무 작업도 하지 않습니다.
코드를 실행해 보겠습니다:
['Nike PG 4', 'Nike Air Max Verona']
코드가 Nike 신발만 모은 새로운 리스트를 반환했습니다.
마무리
지금까지 Python 리스트에서 항목을 찾는 다양한 방법을 살펴보았습니다. 가장 많이 사용되는 방법은 다음과 같습니다:
in멤버십 연산자 사용하기- 선형 탐색(linear search) 구현하기
index()메서드 사용하기- 리스트 컴프리헨션(list comprehension) 활용하기
각 방법은 상황에 따라 장단점이 다릅니다. 단순히 존재 여부만 확인할 때는 in, 항목의 위치까지 알고 싶을 때는 index()나 선형 탐색, 조건에 맞는 여러 항목을 추출할 때는 리스트 컴프리헨션이 적합합니다. 이제 여러분도 전문 개발자처럼 Python 리스트에서 원하는 항목을 자유롭게 검색할 수 있을 것입니다!