Како пронаћи индекс ставке у Питхон листама

У овом водичу ћете научити како да пронађете индекс елемента на Питхон листи, користећи једноставне итерације и уграђени метод листе индек().

Када радите са Питхон листама, можда ћете морати да сазнате индекс на коме се одређена ставка појављује. То можете учинити на следећи начин:

  • Кретање кроз листу и провера да ли је ставка у тренутном индексу једнака одређеној вредности
  • Коришћење уграђеног метода листе индек()

Научићете оба горенаведена у овом водичу. Хајде да почнемо.👩🏽‍💻

Питхон листе, поново прегледане

У Питхон-у, листа је колекција ставки — истих или различитих типова података. Они су променљиви; можете их изменити на месту без потребе да креирате нову листу.

Размотрите овај пример воћа: списак од 5 различитих воћа.

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

Можете добити дужину било ког Питхон објекта коришћењем уграђене функције лен(). Дакле, можете позвати функцију лен() са објектом листе (воће) као аргументом да бисте добили његову дужину, као што је приказано испод.

len(fruits)
# Output: 5

Користићемо листу воћа као пример рада у овом водичу.

Индексирање у Питхон листама

Питхон прати нулто индексирање. Дакле, у било ком Питхон итерабле, прва ставка је на индексу 0, друга ставка је на индексу 1, и тако даље. Ако је дужина итерабле к, онда је последња ставка на индексу к – 1.

У Питхон-у можете користити функцију ранге() да бисте добили индексе док пролазите кроз итерабле.

Напомена: Када прођете кроз опсег (к), добијате индексе 0,1,2,…,(к-1). Дакле, постављањем к = лен(лист), можете добити листу свих важећих индекса.

Следећа ћелија кода објашњава ово.

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

Сада када смо покрили основе Питхон листа, хајде да научимо како да пронађемо индекс ставке на листи.

  Како повећати јачину звука на Цхромебоок-у изнад макс

Пронађите индекс ставке листе помоћу итерације користећи фор петље

Хајде да размотримо листу воћа из претходног одељка. Научићемо како да пронађемо индекс одређене ставке на овој листи итерацијом користећи фор петљу.

Коришћење функције за петљу и опсег().

Хајде да поправимо циљ: вредност коју тражимо на листи.

Можете користити за петљу и функцију ранге() да бисте добили листу индекса од 0 до лен(воће) – 1.

  • Прођите кроз листу воћа која приступа сваком индексу.
  • Проверите да ли је ставка у тренутном индексу и једнака циљу.
  • Ако је тачно, одштампајте да је циљ пронађен на индексу и.
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) на листи воћа.

Међутим, понекад се циљна вредност појављује више пута или се уопште не појављује. Да бисмо решили ове случајеве, хајде да изменимо горњу петљу и умотамо садржај унутар функције која се зове финд_ин_лист.

Разумевање дефиниције функције

Функција финд_ин_лист има два параметра:

  • циљ: вредност коју тражите, и
  • пи_лист: Питхон листа по којој претражујете.
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}")

У телу функције иницијализујемо празну листу таргет_индицес. Пролазимо кроз листу и приступамо ставкама листе. Ако је циљ пронађен на одређеном индексу, додајемо тај индекс на листу таргет_индицес помоћу методе аппенд().

Напомена: У Питхон-у, лист.аппенд(итем) додаје ставку на крај листе.

  • Ако циљ никада није пронађен, онда је таргет_индицес празна листа; корисник је обавештен да циљ није присутан на листи.
  • Ако се циљ налази у више од једног индекса, онда таргет_индицес садржи све те индексе.

Затим, хајде да редефинишемо листу воћа као што је приказано.

Овог пута тражимо циљни низ ‘манго’, који се појављује два пута—на индексима 1 и 4.

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

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

Када позовемо функцију финд_ин_лист са аргументима таргет и фруитс, видимо да су враћена оба индекса.

target = "turnip"
find_in_list(target,fruits)

# Output
Sorry, target not found!

Ако покушате да тражите ‘репа’ које нема на листи воћа, добићете поруку да мета није пронађена.

  Исплатива решења за маркетинг путем е-поште

Коришћење за петље и функције енумерате().

У Питхон-у можете користити функцију енумерате() да бисте истовремено приступили и индексу и ставкама — без потребе да користите функцију ранге().

Следећа ћелија кода показује како можете да користите функцију енумерате() да бисте добили и индексе и ставке.

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

Сада, хајде да поново напишемо Питхон функцију да бисмо пронашли индекс ставки на листи користећи функцију енумерате().

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}")

Као иу претходном одељку, сада можете позвати функцију финд_ин_лист са важећим аргументима.

Можете превести горњу дефиницију функције у еквивалентно разумевање листе и то ћемо урадити у следећем одељку.

Пронађите индекс ставке листе према итерацији користећи разумевање листе

Разумевање листа у Питхон-у вам омогућава да креирате листе од постојећих листа на основу неког услова. Ево опште конструкције:

new_list = [<output> for <items in existing iterables> if <condition is true>] 

Слика испод описује како да идентификујете елементе разумевања листе; користећи ово, можете конвертовати функцију финд_ин_лист у разумевање листе.

Користећи горе наведено, израз за разумевање листе за креирање циљних индекса је следећи.

target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]

Као вежбу, можете покушати да покренете горњи исечак кода за неколико других примера.

Пронађите индекс ставке листе помоћу методе индек().

Да бисте пронашли индекс ставке на Питхон листи, можете користити и уграђени .индек() метод. Ево опште синтаксе:

list.index(value,start,end)

Рашчлањивање горње методе:

  • вредност је циљна вредност коју тражите.
  • почетак и крај су опциони позициони аргументи; можете их користити за претрагу да бисте пронашли индекс ставке у делу листе почевши од почетка и продужујући се до краја – 1.
  Копирајте путању и име датотеке и фасцикле из контекстног менија датотеке

Напомена: Метода .индек() враћа само индекс првог појављивања вредности у листи. Чак и када пронађете индекс ставке у делу листе [start: end-1]овај метод враћа само индекс који одговара првом појављивању ставке.

Хајде да поново погледамо наш пример да бисмо разумели како функционише метода .индек().

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

fruits.index(target)
1

Иако постоје две појаве „манга“ на листи воћа, можете видети да је враћен само индекс првог појављивања.

Да бисмо добили индекс другог појављивања манга, можемо претраживати исечак листе почевши од индекса 2 и проширити се до индекса 5, као што је приказано испод.

fruits.index(target,2,5)
4

Како руковати грешкама вредности у Питхон-у

Сада да видимо шта се дешава ако покушате да пронађете индекс ставке која није присутна на листи, рецимо, ‘шаргарепа’.

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

Као што се види у горњој ћелији кода, ово баца а ВалуеЕррор. У Питхон-у ово можете да третирате као изузетак користећи блокове три и осим.

Општа синтакса за коришћење три-екцепт је следећа.

try:
  # to do this
except <ErrorType>:
  # do this to handle <ErrorType> as exception

Користећи горе наведене блокове три-екцепт, можемо да третирамо ВалуеЕррор као изузетак.

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

Горњи код ради следеће:

  • Ако је циљ присутан на листи, он враћа индекс циља.
  • Ако циљ није присутан, он обрађује ВалуеЕррор као изузетак и штампа поруку о грешци.

Сумирајући

Ево резимеа различитих метода које сте научили да пронађете индекс ставке на Питхон листи.

  • Можете користити Питхон-ове фор петље и ранге() функцију да бисте добили ставке и њихове одговарајуће индексе. Проверите да ли ставке на индексима одговарају циљу.
  • Такође можете користити функцију енумерате() да бисте истовремено приступили ставци и индексу.
  • Можете користити обе горе наведене методе унутар израза за разумевање листе.
  • Да бисте пронашли индекс ставке на листи, можете користити и уграђени .индек() метод.
  • лист.индек(валуе) враћа индекс првог појављивања вредности у листи. Ако вредност није присутна, она покреће ВалуеЕррор.
  • Можете да претражујете кроз одређени део листе користећи лист.индек(валуе, старт, енд) да бисте тражили појаву вредности у делу листе [start:end-1].

Затим научите да сортирате Питхон речник по кључу или вредности. Срећно програмирање на Питхон-у!