Käytä luettelon ymmärtämistä rakentaaksesi uuden luettelon mistä tahansa iterableista yhdellä luettavissa olevalla lausekkeella. Pythonin syntaksi on dokumentoitu virallisessa asiakirjassa, ja ominaisuus on peräisin PEP 202: sta.
Menetelmä 1: Luo luettelo perustiedolla
Vaihe 1:Julista lähde toistettavaksi.
nums = [2, 3, 4, 5]Vaihe 2:Kirjoita ymmärrys kuvion avulla[expression for item in iterable].
squares = [n * n for n in nums]
print(squares) # [4, 9, 16, 25]Vaihe 3:Pidä alkuperäinen luettelo ennallaan.
print(nums) # [2, 3, 4, 5]Menetelmä 2: Suodatinkohteetiflause
Vaihe 1:Lisää takaosa, johon sisältyy vain vastaavia elementtejä.
nums = range(10)
evens = [n for n in nums if n % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]Vaihe 2:Käytä mitä tahansa iterable (luettelot, tuplit, sarjat, generaattorit).
letters = ("a", "b", "c", "aa", "bb")
filtered = [s for s in letters if len(s) == 1]
print(filtered) # ['a', 'b', 'c']Menetelmä 3: Muunna ehdollisesti sisäinenif-else
Vaihe 1:Aseta ehdollinen lauseke ennenforJokaisen lähtöarvo valitsee.
temps = [12, -3, 18, -1]
non_negative = [t if t >= 0 else 0 for t in temps]
print(non_negative) # [12, 0, 18, 0]Vaihe 2:Jatka suodattamista erillään muuntamisesta, jos tarvitset molemmat.
# Filter positives, then transform.
positives_squared = [t * t for t in temps if t > 0]
print(positives_squared) # [144, 324]Menetelmä 4: Yhdistä useita silmukoita ja tasoitettuja tietoja
Vaihe 1:Ketjuforlausekkeet yhdistelmien luomiseksi.
xs = [1, 2]
ys = ["a", "b", "c"]
pairs = [(x, y) for x in xs for y in ys]
print(pairs) # [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c')]Vaihe 2:Tasoita luettelo luetteloista iteroivat rivejä, sitten arvoja.
Lue lisää:Lajittele luettelo Pythonissa
grid = [[1, 2], [3, 4], [5, 6]]
flat = [v for row in grid for v in row]
print(flat) # [1, 2, 3, 4, 5, 6]Menetelmä 5: Suoraista suuria tuloksia generaattorin lausekkeella
Vaihe 1:Vaihda suluilla sulkeet, jotta vältetään täydellinen luettelo muistissa.
gen = (n * n for n in range(1_000_000)) # generator expression
Vaihe 2:Kuluttaa generaattoria, jolla on toiminto, kutensum().
total = sum(n for n in range(1_000_000))
print(total)Miksi sillä on merkitystä: Generaattorien lausekkeita arvioidaan laiskasti, mikä pitää muistin käyttöä alhaisina valtavissa tietojoukkoissa. Katso PEP 289: n alkuperäinen suunnitteluhuomautus.
Menetelmä 6: Suosittele sisäänrakennettuja monimutkaisia käsityksiä verrattuna
Vaihe 1:Käyttääzip()Siirrettäväksi syvästi sisäkkäisen ilmaisun sijasta.
matrix = [
[1, 2, 3],
[4, 5, 6],
]
transposed = list(zip(*matrix))
print(transposed) # [(1, 4), (2, 5), (3, 6)]Vaihe 2:Valitse silmukka, jos ymmärrys kattaa useita viivoja tai sisällyttäisi sivuvaikutuksia.
items = [" apple", "banana ", " pear "]
cleaned = []
for s in items:
t = s.strip()
cleaned.append(t)
print(cleaned) # ['apple', 'banana', 'pear']Menetelmä 7: Vertaa vastaavaanforsilmukka
Vaihe 1:Alusta lähtöluettelo perinteistä silmukkaa käytettäessä.
nums = [1, 2, 3, 4]
doubled = []Vaihe 2:Liitä silmukan sisään ja pidä logiikka nimenomaisesti.
for n in nums:
doubled.append(n * 2)
print(doubled) # [2, 4, 6, 8]Vaihe 3:Käytä ymmärtämisversiota, kun se on lyhyempi ja yhtä selkeä.
doubled_fast = [n * 2 for n in nums]
print(doubled_fast) # [2, 4, 6, 8]Nopeat kuviot, joita käytät uudelleen
- Kartta -arvot:
[f(x) for x in data]. - Suodatinarvot:
[x for x in data if keep(x)]. - Ehdolliset lähdöt:
[a(x) if test(x) else b(x) for x in data]. - Tasa -sisäkkäiset luettelot:
[y for row in rows for y in row].
Viittaus virallisen dokumentoinnin syntaksille ja vivahteille harjoittaessasi.
Siinä se - käytä kovaa kompakteja, luettavissa olevia muunnoksia, vaihda generaattorien lausekkeisiin erittäin suurille lähdöille ja pudota takaisin puhdas silmukoiden, kun logiikka on kiireinen.














