Як знайти індекс елемента в списках Python

У цьому посібнику ви дізнаєтеся, як знайти індекс елемента в списку Python за допомогою простих ітерацій і вбудованого методу списку index().

Під час роботи зі списками Python вам може знадобитися з’ясувати індекс, за яким зустрічається певний елемент. Ви можете зробити це:

  • Переглядати список і перевіряти, чи дорівнює елемент за поточним індексом певному значенню
  • Використання вбудованого методу списку index()

У цьому підручнику ви дізнаєтесь про обидва вищезазначені способи. Давайте почнемо.👩🏽‍💻

Перегляд списків Python

У Python список — це набір елементів — одного або різних типів даних. Вони змінні; ви можете змінити їх на місці, не створюючи новий список.

Розглянемо цей приклад фруктів: список із 5 різних фруктів.

fruits = ["apple","mango","strawberry","pomegranate","melon"]

Ви можете отримати довжину будь-якого об’єкта Python за допомогою вбудованої функції len(). Таким чином, ви можете викликати функцію len() з об’єктом списку (фрукти) як аргументом, щоб отримати його довжину, як показано нижче.

len(fruits)
# Output: 5

У цьому посібнику ми використаємо список фруктів як робочий приклад.

Індексація в списках Python

Python дотримується нульової індексації. Таким чином, у будь-якому ітераторі Python перший елемент має індекс 0, другий елемент має індекс 1 і так далі. Якщо довжина iterable дорівнює k, то останній елемент має індекс k – 1.

У Python ви можете використовувати функцію 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.

  Як змінити співвідношення сторін в iMovie

Використання циклу 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

У цьому прикладі цільовий рядок «манго» з’являється рівно один раз (під індексом 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. Ми проходимо список і отримуємо доступ до елементів списку. Якщо ціль знайдено за певним індексом, ми додаємо цей індекс до списку target_indices за допомогою методу append().

Примітка. У Python list.append(item) додає елемент у кінець списку.

  • Якщо ціль ніколи не знайдено, тоді target_indices є порожнім списком; користувач сповіщається, що мета відсутня в списку.
  • Якщо ціль знайдено за кількома індексами, тоді target_indices містить усі ці індекси.

Далі перевизначимо список фруктів, як показано.

Цього разу ми шукаємо цільовий рядок «mango», який зустрічається двічі — під індексами 1 і 4.

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
target = "mango"
find_in_list(target,fruits)

# Output
mango is found at indices [1, 4]

Викликаючи функцію find_in_list з target і fruits як аргументами, ми бачимо, що повертаються обидва індекси.

target = "turnip"
find_in_list(target,fruits)

# Output
Sorry, target not found!

Якщо ви спробуєте знайти «ріпу», якої немає у списку фруктів, ви отримаєте повідомлення про те, що ціль не знайдено.

  Microsoft Chromium-Powered Edge має темний режим, ось як його ввімкнути

Використання циклу 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

Тепер давайте перепишемо функцію Python, щоб знайти індекс елементів у списку за допомогою функції enumerate().

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]цей метод повертає лише індекс, що відповідає першому входженню елемента.

  Усе, що ви хотіли знати про обсяг пошуку за ключовими словами для SEO у 2022 році

Давайте переглянемо наш приклад, щоб зрозуміти, як працює метод .index().

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
target = "mango"

fruits.index(target)
1

Незважаючи на те, що у списку фруктів є два випадки «манго», ви бачите, що було повернуто лише індекс першого входження.

Щоб отримати індекс другого входження mango, ми можемо виконати пошук у фрагменті списку, починаючи з індексу 2 і продовжуючи до індексу 5, як показано нижче.

fruits.index(target,2,5)
4

Як обробляти ValueErrors у Python

Тепер давайте подивимося, що станеться, якщо ви спробуєте знайти індекс елемента, якого немає в списку, скажімо, «морква».

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

Як видно з клітинки коду вище, це викидає a ValueError. У Python ви можете обробити це як виняток, використовуючи блоки try і osim.

Загальний синтаксис використання 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) повертає індекс першого входження значення в список. Якщо значення відсутнє, виникає помилка ValueError.
  • Ви можете здійснювати пошук у певному фрагменті списку за допомогою list.index(value, start, end) для пошуку значення у фрагменті списку [start:end-1].

Далі навчіться сортувати словник Python за ключем або значенням. Щасливого програмування на Python!