Mikä on Python's Lied () -toiminto ja miten käytät sitä?

Mitä se on

Pythonenumerate()on sisäänrakennettu(index, value). Se palauttaa kevyen ”luetella esineen”, jonka voit toistaa suoraan tai heittää luetteloon. Katso koko allekirjoitus virallisesta asiakirjasta.

Miksi sillä on merkitystä

  • Poistaa virheen alttiita käsikirjoja silmukoissa.
  • Pysyy luettavissa ja "pythonic" verrattunarange(len(...)).
  • Toimii laiskasti, joten se on tehokas suurille iterableille.

Kuinka se toimii

Oletusarvoisesti hakemisto alkaa 0: sta. Voit muuttaa sitä valinnaisen kanssastartväite.

# Basic usage
runners = ["Lenka", "Martina", "Gugu"]
for i, name in enumerate(runners):
    print(i, name)
# 0 Lenka
# 1 Martina
# 2 Gugu

# One-based indexing
for position, name in enumerate(runners, start=1):
    print(position, name)
# 1 Lenka
# 2 Martina
# 3 Gugu

Konepellin alla,enumerate()tuottaa parin jokaisessa iteraatiossa. Voit toteuttaa sen rakenteen tarkastamiseksi:

seasons = ["Spring", "Summer", "Fall", "Winter"]
print(list(enumerate(seasons)))
# [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]

Se on myös tavallinen iteraattori, joten voit suorittaa sen läpinext()-

it = enumerate(["a", "b", "c"], start=10)
print(next(it))  # (10, 'a')
print(next(it))  # (11, 'b')
print(next(it))  # (12, 'c')

Kuinka käyttää sitä (käytännölliset mallit)

1) Korosta ensimmäinen kohde tai tietty vaihe

tasks = ["Pay Rent", "Clean Dishes", "Buy Milk"]
for idx, task in enumerate(tasks):
    if idx == 0:
        print(f"* {task.upper()}!")
    else:
        print(f"* {task}")
# * PAY RENT!
# * Clean Dishes
# * Buy Milk

2) Tartu joka toinen merkki merkkijonosta

secret = "3LAigf7eq 5fhiOnpdDs2 Ra6 nwUalyo.9"
message = []
for i, ch in enumerate(secret):
    if i % 2:           # odd indexes only
        message.append(ch)
print("".join(message))

3) Lisää rivinumeroita tiedoston sisällön skannauksen aikana

lines = [
    "This is atline",
    "This line is fine",
    "Another line with whitespace "
]
for lineno, line in enumerate(lines, start=1):
    if "t" in line:
        print(f"Line {lineno}: Contains a tab character.")
    if line.rstrip() != line:
        print(f"Line {lineno}: Contains trailing whitespace.")

4) iteroi sanakirjat hakemistolla

Modernissa Pythonissa Dicts säilyttää lisäysjärjestyksen, joten voit indeksoida parit jatkuvasti:

Katso myös:Kuinka määritellä funktio pythonissa

months = {
    "january": "winter",
    "february": "winter",
    "march": "spring",
}
for idx, (month, season) in enumerate(months.items(), start=1):
    print(f"{idx}: {month} - {season}")
# 1: january - winter
# 2: february - winter
# 3: march - spring

Rajat ja kauppa

  • Se on iteraattori, ei luettelo.Voit silmukan sen kerran. Jos tarvitset satunnaista pääsyä, heitälist(...)ensimmäinen.
  • Se indeksoi yhden iteroitavan.Jos pariliitot useita sekvenssejä,zip(...)sopii paremmin.
  • Välttäärange(len(seq))Ellet todella tarvitse vain hakemistoja. enumerate()Kommunikoi sekä aikomuksen että rakenteen selkeämmin.

Milloin ei käytetäenumerate()

  • Monisekvenssin iterointi: mieluumminzip(a, b)ja purkaa molemmat arvot suoraan.
  • Viipalointitehtävät: Jos tarvitset vain viipaletta, kuten ”ensimmäiset 4 charsia”, käytä viipalointia, eienumerate()Plus ehdolliset.
  • Viereiset parit: Reiteille tai peräkkäisille kohteille tavoita työkaluja, kutenitertools.pairwiseSen sijaan, että indeksointi olisi.
# zip() beats enumerate()+index reuse for multi-sequence loops
pets   = ["Leo", "Aubrey", "Frieda"]
owners = ["Bartosz", "Sarah Jane", "Philipp"]
for pet, owner in zip(pets, owners):
    print(f"{pet} & {owner}")

Faqit

Mikä tekeeenumerate()palata?
Luetellaan objekti, joka tuottaa(index, value)Tuhaset, kun iteraat.

Kuinka aloitan laskea 1: stä?
Syöttöstart=1-llaenumerate(iterable, start=1).

Voinko käyttää samaa luetellaan esinettä?
Ei sen jälkeen, kun se on kulunut. Se on iteraattori. Luo uusi tai toteuta se luettelona, ​​jos tarvitset useita passia.

Onenumerate()Nopeampi kuin manuaaliset laskurit?
Se on toteutettu tehokkaasti ja poistaa kirjanpidon koodistasi. Suorituskyvyn lisäksi sen selkeys on tärkein voitto.

Related Posts