이 가이드에서는 간단한 반복과 기본 제공 목록 메서드 index()를 사용하여 Python 목록에서 요소의 인덱스를 찾는 방법을 배웁니다.
Python 목록으로 작업할 때 특정 항목이 발생하는 색인을 찾아야 할 수도 있습니다. 다음과 같이 할 수 있습니다.
- 목록을 반복하고 현재 인덱스의 항목이 특정 값과 같은지 확인
- 내장 목록 메서드 index() 사용
이 튜토리얼에서 위의 두 가지를 모두 배우게 됩니다. 시작해봅시다.👩🏽💻
목차
파이썬 목록, 재검토
Python에서 목록은 데이터 유형이 같거나 다른 항목의 모음입니다. 그들은 변경 가능합니다. 새 목록을 만들 필요 없이 제자리에서 수정할 수 있습니다.
5가지 다른 과일 목록인 과일의 예를 고려하십시오.
fruits = ["apple","mango","strawberry","pomegranate","melon"]
내장 len() 함수를 사용하여 모든 Python 객체의 길이를 얻을 수 있습니다. 따라서 아래와 같이 목록 개체(과일)를 인수로 사용하여 len() 함수를 호출하여 길이를 얻을 수 있습니다.
len(fruits) # Output: 5
이 튜토리얼에서는 과일 목록을 실행 예제로 사용할 것입니다.
Python 목록의 인덱싱
파이썬은 제로 인덱싱을 따릅니다. 따라서 모든 Python iterable에서 첫 번째 항목은 인덱스 0에 있고 두 번째 항목은 인덱스 1에 있는 식입니다. iterable의 길이가 k이면 마지막 항목은 인덱스 k – 1에 있습니다.
파이썬에서는 range() 함수를 사용하여 iterable을 반복하면서 인덱스를 얻을 수 있습니다.
참고: range(k)를 반복하면 인덱스 0,1,2,…,(k-1)을 얻습니다. 따라서 k = len(list)을 설정하면 모든 유효한 인덱스 목록을 얻을 수 있습니다.
다음 코드 셀은 이에 대해 설명합니다.
for i in range(len(fruits)): print(f"i:{i}, fruit[{i}] is {fruits[i]}") # Output i:0, fruit[0] is apple i:1, fruit[1] is mango i:2, fruit[2] is strawberry i:3, fruit[3] is pomegranate i:4, fruit[4] is melon
이제 Python 목록의 기본 사항을 다루었으므로 목록에서 항목의 인덱스를 찾는 방법을 알아보겠습니다.
for 루프를 사용하여 반복하여 목록 항목의 인덱스 찾기
이전 섹션의 과일 목록을 살펴보겠습니다. for 루프를 사용하여 반복하여 이 목록에서 특정 항목의 인덱스를 찾는 방법을 배웁니다.
for 루프 및 range() 함수 사용
target: 우리가 목록에서 찾고 있는 값을 수정합시다.
for 루프와 range() 함수를 사용하여 0에서 len(fruits) – 1까지의 인덱스 목록을 가져올 수 있습니다.
- 각 인덱스에 액세스하는 과일 목록을 반복합니다.
- 현재 인덱스 i에 있는 항목이 대상과 같은지 확인합니다.
- True이면 인덱스 i에서 대상이 발견되었음을 출력합니다.
fruits = ["apple","mango","strawberry","pomegranate","melon"] target = "mango" for i in range(len(fruits)): if fruits[i] == target: print(f"{target} found at index {i}") # Output mango found at index 1
이 예에서 대상 문자열 ‘mango’는 목록 과일에서 정확히 한 번(인덱스 1에서) 나타납니다.
그러나 때때로 목표 값이 두 번 이상 나타나거나 전혀 나타나지 않습니다. 이러한 경우를 처리하기 위해 위의 루프를 수정하고 find_in_list라는 함수 안에 내용을 래핑합니다.
함수 정의 이해하기
find_in_list 함수에는 두 개의 매개변수가 있습니다.
- target: 찾고자 하는 값, 그리고
- py_list: 검색 중인 Python 목록입니다.
def find_in_list(target,py_list): target_indices = [] for i in range(len(fruits)): if fruits[i] == target: target_indices.append(i) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")
함수 본문에서 빈 목록 target_indices를 초기화합니다. 목록을 반복하고 목록 항목에 액세스합니다. 특정 인덱스에서 대상이 발견되면 append() 메서드를 사용하여 해당 인덱스를 target_indices 목록에 추가합니다.
참고: Python에서 list.append(item)은 항목을 목록 끝에 추가합니다.
- 대상을 찾을 수 없는 경우 target_indices는 빈 목록입니다. 사용자는 대상이 목록에 없다는 알림을 받습니다.
- 대상이 둘 이상의 인덱스에서 발견되면 target_indices에는 해당 인덱스가 모두 포함됩니다.
다음으로 그림과 같이 과일 목록을 재정의해 보겠습니다.
이번에는 인덱스 1과 4에서 두 번 발생하는 대상 문자열 ‘mango’를 검색합니다.
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" find_in_list(target,fruits) # Output mango is found at indices [1, 4]
target 및fruits를 인수로 사용하여 find_in_list 함수를 호출하면 두 인덱스가 모두 반환되는 것을 볼 수 있습니다.
target = "turnip" find_in_list(target,fruits) # Output Sorry, target not found!
과일 목록에 없는 ‘순무’를 검색하면 대상을 찾지 못했다는 메시지가 나타납니다.
for 루프 및 enumerate() 함수 사용
Python에서는 enumerate() 함수를 사용하여 range() 함수를 사용할 필요 없이 인덱스와 항목에 동시에 액세스할 수 있습니다.
다음 코드 셀은 enumerate() 함수를 사용하여 인덱스와 항목을 모두 가져오는 방법을 보여줍니다.
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] for index,fruit in enumerate(fruits): print(f"Index {index}: {fruit}") # Output Index 0: apple Index 1: mango Index 2: strawberry Index 3: pomegranate Index 4: mango Index 5: melon
이제 enumerate() 함수를 사용하여 목록에서 항목의 인덱스를 찾는 Python 함수를 다시 작성해 보겠습니다.
def find_in_list(target,py_list): target_indices = [] for index, fruit in enumerate(fruits): if fruit == target: target_indices.append(index) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")
이전 섹션과 마찬가지로 이제 유효한 인수를 사용하여 find_in_list 함수를 호출할 수 있습니다.
위의 함수 정의를 동등한 목록 이해로 번역할 수 있으며 다음 섹션에서 그렇게 할 것입니다.
목록 이해를 사용하여 반복하여 목록 항목의 색인 찾기
Python의 목록 이해를 사용하면 일부 조건에 따라 기존 목록에서 목록을 만들 수 있습니다. 다음은 일반적인 구성입니다.
new_list = [<output> for <items in existing iterables> if <condition is true>]
아래 그림은 목록 이해의 요소를 식별하는 방법을 설명합니다. 이것을 사용하여 find_in_list 함수를 목록 이해로 변환할 수 있습니다.
위의 내용을 이용하여 대상 인덱스를 생성하기 위한 목록 이해의 표현은 다음과 같다.
target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]
연습으로 몇 가지 다른 예에 대해 위의 코드 조각을 실행해 볼 수 있습니다.
index() 메서드를 사용하여 목록 항목의 인덱스 찾기
Python 목록에서 항목의 인덱스를 찾으려면 내장 .index() 메서드를 사용할 수도 있습니다. 다음은 일반 구문입니다.
list.index(value,start,end)
위의 방법을 파싱:
- 값은 검색 중인 대상 값입니다.
- 시작과 끝은 선택적 위치 인수입니다. 이를 사용하여 시작에서 시작하여 끝까지 확장되는 목록 조각에서 항목의 색인을 찾는 데 사용할 수 있습니다(1).
참고: .index() 메서드는 목록에서 값이 처음 나타나는 인덱스만 반환합니다. 목록 조각에서 항목의 인덱스를 찾은 경우에도 [start: end-1]이 메서드는 항목의 첫 번째 항목에 해당하는 인덱스만 반환합니다.
.index() 메서드가 어떻게 작동하는지 이해하기 위해 예제를 다시 살펴보겠습니다.
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" fruits.index(target) 1
과일 목록에 ‘망고’가 두 번 나왔음에도 불구하고 처음 나온 인덱스만 반환된 것을 알 수 있습니다.
두 번째로 발생하는 망고의 인덱스를 얻으려면 아래와 같이 인덱스 2에서 시작하여 인덱스 5까지 확장되는 목록 슬라이스를 검색할 수 있습니다.
fruits.index(target,2,5) 4
Python에서 ValueError를 처리하는 방법
이제 목록에 없는 항목(예: ‘당근’)의 색인을 찾으려고 하면 어떻게 되는지 살펴보겠습니다.
target = "carrot" fruits.index(target) # Output --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-17-81bd454e44f7> in <module>() 1 target = "carrot" 2 ----> 3 fruits.index(target) ValueError: 'carrot' is not in list
위의 코드 셀에서 볼 수 있듯이 값 오류. Python에서는 try 및 except 블록을 사용하여 이를 예외로 처리할 수 있습니다.
try-except를 사용하는 일반적인 구문은 다음과 같습니다.
try: # to do this except <ErrorType>: # do this to handle <ErrorType> as exception
위의 try-except 블록을 사용하여 ValueError를 예외로 처리할 수 있습니다.
target = "carrot" try: fruits.index(target) except ValueError: print(f"Sorry, could not find {target} in list") # Output Sorry, could not find carrot in list
위의 코드는 다음을 수행합니다.
- 대상이 목록에 있으면 대상의 인덱스를 반환합니다.
- 대상이 없으면 ValueError를 예외로 처리하고 오류 메시지를 출력합니다.
합산
다음은 Python 목록에서 항목의 인덱스를 찾는 방법을 배운 다양한 방법에 대한 요약입니다.
- Python의 for 루프 및 range() 함수를 사용하여 항목과 해당 인덱스를 가져올 수 있습니다. 인덱스의 항목이 대상과 일치하는지 확인합니다.
- enumerate() 함수를 사용하여 항목과 인덱스에 동시에 액세스할 수도 있습니다.
- 목록 이해 표현식 내에서 위의 두 가지 방법을 모두 사용할 수 있습니다.
- 목록에서 항목의 인덱스를 찾으려면 내장 .index() 메서드를 사용할 수도 있습니다.
- list.index(value)는 목록에서 value가 처음 나타나는 인덱스를 반환합니다. 값이 없으면 ValueError가 발생합니다.
- list.index(value, start, end)를 사용하여 목록의 특정 조각을 검색하여 목록 조각에서 값의 발생을 검색할 수 있습니다. [start:end-1].
다음으로 키 또는 값을 기준으로 Python 사전을 정렬하는 방법을 배웁니다. 행복한 파이썬 프로그래밍!