Функција Питхон енумерате(), објашњена примерима

Овај водич ће вас научити како да користите функцију енумерате() у Питхон-у.

Функција енумерате() у Питхон-у обезбеђује сажету синтаксу за приступ ставкама у итерабле заједно са њиховим индексима.

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

Почнимо.

Како поновити користећи фор петљу у Питхон-у

Било који Питхон објекат преко којег можете итерирати и приступити појединачним ставкама – једном по једном назива се итерабле. Према томе, Питхон листе, тупле, речници и стрингови су све итерабле.

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

shopping_list = ["fruits","cookies","cereals","protein bars","post-it notes"]

У Питхон-у, можете користити фор петљу за петљу кроз било који итерабле. Синтакса за ово је следећа:

for item in <iterable>:
    # do something on item

# item: looping variable
# <iterable>: any Python iterable: list, tuple, dictionary, string, and so on.

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

for item in shopping_list:
  print(item)

# Output
fruits
cookies
cereals
protein bars
post-it notes

Ова конструкција вам помаже да директно приступите ставкама. Међутим, понекад ћете морати да приступите индексу ставки, поред самих ставки.

Можете користити променљиву индекса, коју можете повећати унутар тела петље, као што је приказано у наставку:

index = 0
for item in shopping_list:
  print(f"index:{index}, {item}")
  index += 1

# Output
index:0, fruits
index:1, cookies
index:2, cereals
index:3, protein bars
index:4, post-it notes

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

index = 0
for item in shopping_list:
  print(f"index:{index}, {item}")
  # no update of index inside loop body
  # index is never updated and is always 0

# Output
index:0, fruits
index:0, cookies
index:0, cereals
index:0, protein bars
index:0, post-it notes

Још један уобичајени образац коришћења фор петље је у комбинацији са функцијом ранге(). О томе ћемо научити у следећем одељку.

  Како пребројати критеријуме скупа подударања података у Гоогле табелама

Како користити функцију ранге() за приступ индексу

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

len(shopping_list)
# Output: 5

Функција ранге() враћа објекат опсега који онда можете користити у петљи. Када прођете кроз опсег(стоп), добијате индексе 0, 1, 2,…, стоп-1.

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

for index in range(len(shopping_list)):
  print(f"index:{index}, item: {shopping_list[index]}")

# Output
index:0, item: fruits
index:1, item: cookies
index:2, item: cereals
index:3, item: protein bars
index:4, item: post-it notes

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

Синтакса функције Питхон енумерате().

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

enumerate(<iterable>, start = 0)

У горњој синтакси:

  • <итерабле> је обавезан параметар и може бити било који Питхон итерабле, као што је листа или тупле.
  • старт је опциони параметар који контролише индекс са којим почиње бројање. Ако не наведете вредност почетка, подразумевано је нула.

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

enumerate(shopping_list)
<enumerate at 0x7f91b4240410>

Не можете проћи кроз објекат за набрајање. Дакле, хајде да претворимо објекат енумерате у Питхон листу.

list(enumerate(shopping_list))

# Output
[(0, 'fruits'),
 (1, 'cookies'),
 (2, 'cereals'),
 (3, 'protein bars'),
 (4, 'post-it notes')]

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

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

Хајде да доделимо објекат енумерате променљивој схоппинг_лист_енум.

shopping_list_enum = enumerate(shopping_list)

Када први пут позовете нект() са схоппинг_лист_енум, добићете индекс нула и ставку са индексом 0: тупле (0, ‘воће’).

Када наставите да упућујете даље позиве функцији нект(), добићете узастопне ставке заједно са њиховим индексима, као што је описано у наставку.

next(shopping_list_enum)
# (0, 'fruits')
next(shopping_list_enum)
# (1, 'cookies')
next(shopping_list_enum)
# (2, 'cereals')
next(shopping_list_enum)
# (3, 'protein bars')
next(shopping_list_enum)
# (4, 'post-it notes')

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

next(shopping_list_enum)
# ---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-16-4220f68f6c7e> in <module>()
----> 1 next(shopping_list_enum)

StopIteration:

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

Примери функција Питхон енумерате().

Сада када смо научили синтаксу за коришћење функције енумерате(), хајде да изменимо петљу фор коју смо имали раније.

Из претходног одељка знамо да петља кроз објекат енумерате враћа тупле са индексом и ставком. Можемо распаковати ову торбу у две променљиве: индекс и ставку.

for index, item in enumerate(shopping_list):
  print(f"index:{index}, item:{item}")

# Output
index:0, item:fruits
index:1, item:cookies
index:2, item:cereals
index:3, item:protein bars
index:4, item:post-it notes

Затим, да видимо како да наведемо прилагођену почетну вредност.

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

Питхон прати нулто индексирање, тако да је почетна вредност подразумевано 0. Међутим, ако су вам потребни индекси у читљивом облику — почевши од 1 или било ког другог индекса по вашем избору, можете навести прилагођену почетну вредност.

У примеру листе за куповину, ако желите да почнете да бројите од 1, поставите почетак = 1.

for index, item in enumerate(shopping_list,1):
  print(f"index:{index}, item:{item}")

# Output
index:1, item:fruits
index:2, item:cookies
index:3, item:cereals
index:4, item:protein bars
index:5, item:post-it notes

Међутим, када наводите прилагођену почетну вредност, обавезно је наведите као други позициони аргумент.

Ако грешком замените редослед итерабле и почетне вредности, наишли бисте на грешку, као што је објашњено у ћелији кода испод.

for index, item in enumerate(1,shopping_list):
  print(f"index:{index}, item:{item}")

# Output
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-5dbf7e2749aa> in <module>()
----> 1 for index, item in enumerate(1,shopping_list):
      2   print(f"index:{index}, item:{item}")

TypeError: 'list' object cannot be interpreted as an integer

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

for index, item in enumerate(shopping_list, start = 1):
  print(f"index:{index}, item:{item}")

# Output
index:1, item:fruits
index:2, item:cookies
index:3, item:cereals
index:4, item:protein bars
index:5, item:post-it notes

До сада сте научили како да користите функцију енумерате() са Питхон листама. Такође можете користити функцију енумерате за петљу кроз Питхон стрингове, речнике и торке.

Како користити функцију енумерате() са Питхон торкама

Претпоставимо да је листа за куповину торка. У Питхон-у, торке су такође колекције—слично Питхон листама, али су непроменљиве. Стога их не можете мењати, а покушај да то урадите ће довести до грешке.

Следећи исечак кода иницијализује схоппинг_лист као тупле.

shopping_list = ("fruits","cookies","cereals","protein bars","post-it notes")
type(shopping_list)
# Tuple

Ако покушате да измените прву ставку у тупле-у, добићете грешку јер је Питхон торка непроменљива колекција.

shopping_list[0] = 'vegetables'

# Output
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-ffdafa961600> in <module>()
----> 1 shopping_list[0] = 'vegetables'

TypeError: 'tuple' object does not support item assignment

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

shopping_list = ("fruits","cookies","cereals","protein bars","post-it notes")
for index, item in enumerate(shopping_list):
    print(f"index:{index}, item:{item}")

Како користити функцију енумерате() са Питхон стринговима

Такође можете да користите функцију Питхон енумерате() за петљу кроз низове и истовремено приступање знаковима и индексима.

Ево примера.

py_str="Butterfly"
for index, char in enumerate(py_str):
  print(f"index {index}: {char}")

# Output
index 0: B
index 1: u
index 2: t
index 3: t
index 4: e
index 5: r
index 6: f
index 7: l
index 8: y

Из горњег излаза видимо да су знакови заједно са њиховим индексима (0-8) одштампани.

Закључак👩🏽‍💻

Ево резимеа онога што сте научили.

  • Можете користити фор петље за приступ ставкама и одржавање засебног бројача или променљиве индекса.
  • Ако желите, можете користити функцију ранге() да бисте добили важеће индексе и приступили ставкама индексирањем на листи.
  • Као препоручени Питхониц начин, можете користити Питхонову функцију енумерате() са синтаксом: енумерате(итерабле). Подразумевано, број или индекс почиње од 0.
  • Можете навести прилагођену почетну вредност помоћу синтаксе енумерате(итерабле, старт) да бисте добили индекс који почиње на почетку вредности и одговарајуће ставке.
  • Функцију енумерате можете користити када радите са торкама, стринговима, речницима и уопште, било којим Питхон итерабле.

Надам се да вам је овај водич о функцији енумерате() био од помоћи. Затим научите како да пронађете индекс ставке на Питхон листама. Наставите са кодирањем!