Kirjoita luettelon ymmärrys Pythonissa

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.

Related Posts