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" verrattuna
range(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: mieluummin
zip(a, b)ja purkaa molemmat arvot suoraan. - Viipalointitehtävät: Jos tarvitset vain viipaletta, kuten ”ensimmäiset 4 charsia”, käytä viipalointia, ei
enumerate()Plus ehdolliset. - Viereiset parit: Reiteille tai peräkkäisille kohteille tavoita työkaluja, kuten
itertools.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.












