Python 목록에서 항목의 색인을 찾는 방법

이 가이드에서는 간단한 반복과 기본 제공 목록 메서드 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 목록의 기본 사항을 다루었으므로 목록에서 항목의 인덱스를 찾는 방법을 알아보겠습니다.

  Roblox의 26가지 최고의 타이쿤 게임

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!

과일 목록에 없는 ‘순무’를 검색하면 대상을 찾지 못했다는 메시지가 나타납니다.

  나의 iPhone 찾기에서 위치를 고정하는 방법

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).
  HDD와 SSD의 차이점은 무엇입니까?

참고: .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 사전을 정렬하는 방법을 배웁니다. 행복한 파이썬 프로그래밍!