Python-luetteloiden (matriisien) tiettyjen elementtien poimiminen, korvaaminen ja muuntaminen.

liiketoiminta

Voit luoda uuden luettelon Pythonissa poimimalla tai poistamalla olemassa olevasta luettelosta (matriisista) vain ne elementit, jotka täyttävät tietyt ehdot, tai suorittamalla korvauksia tai muunnoksia käyttämällä luettelokäsitteitä.

Seuraavat asiat selitetään tässä yhdessä esimerkkikoodin kanssa.

  • Luettelon ymmärtämisen perusmuoto
  • Sovelletaan prosessia kaikkiin luettelon elementteihin
  • Kriteerit täyttävien elementtien poimiminen ja poistaminen luettelosta.
  • Korvaa tai muunna elementit, jotka täyttävät luettelon ehdot.

Seuraavassa artikkelissa on erityisiä esimerkkejä merkkijonoluetteloista.

On myös mahdollista poimia satunnaisesti elementtejä, jotka eivät täytä kriteerejä.

Huomaa, että luettelot voivat tallentaa erityyppistä dataa ja eroavat selvästi matriiseista. Jos haluat käsitellä matriiseja prosesseissa, jotka vaativat muistin kokoa ja muistiosoitteita tai suurten tietojen numeerista käsittelyä, käytä arraya (standardikirjasto) tai NumPy:tä.

Seuraava luettelo on esimerkki

l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

Luettelon ymmärtämisen perusmuoto

Kun listasta luodaan uusi lista, listakäsittelyt ovat yksinkertaisempia kirjoittaa kuin for-silmukat.

[expression for any variable name in iterable object if conditional expression]

Lauseketta sovelletaan elementtiin, joka täyttää iteroitavan objektin (kuten listan tai tuplen) ehdollisen lausekkeen, ja siitä tulee uuden listan elementti. ”if-ehdollinen lauseke” voidaan jättää pois, jolloin lauseketta sovelletaan kaikkiin alkioihin.

Katso lisätietoja seuraavasta artikkelista, mukaan lukien sisäkkäisen listan ymmärtämisen merkintätapa.

Sovelletaan prosessia kaikkiin luettelon elementteihin

Jos esimerkiksi haluat soveltaa jotakin käsittelyä kaikkiin luettelon elementteihin, kuvaa haluttu käsittely yllä olevassa luettelon ymmärtämisen lausekkeessa.

l_square = [i**2 for i in l]
print(l_square)
# [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]

l_str = [str(i) for i in l]
print(l_str)
# ['-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5']

Tätä voidaan käyttää muunnettaessa numeroiden ja merkkijonojen luetteloiden välillä.

Kriteerit täyttävien elementtien poimiminen ja poistaminen luettelosta.

Jos elementti valitaan vain ehdollisella lausekkeella, sitä ei käsitellä lausekkeella, joten se on seuraavassa muodossa

[variable name for variable name in original list if conditional expression]

Luodaan uusi lista, josta poimitaan vain ehdon täyttävät elementit (elementit, joiden osalta ehdollinen lauseke on tosi).

l_even = [i for i in l if i % 2 == 0]
print(l_even)
# [-4, -2, 0, 2, 4]

l_minus = [i for i in l if i < 0]
print(l_minus)
# [-5, -4, -3, -2, -1]

Jos ”if-ehdollinen lauseke” asetetaan muotoon ”if not-ehdollinen lauseke”, siitä tulee negaatio, ja vain elementit, jotka eivät täytä ehtoa (elementit, joiden osalta ehdollinen lauseke on epätosi), voidaan valita ja poimia. Toisin sanoen luodaan uusi luettelo, josta poistetaan ehdon täyttävät elementit.

l_odd = [i for i in l if not i % 2 == 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if not i < 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

Sama tulos saadaan tietysti antamalla vastaava ehdollinen lauseke ilman not-merkkiä.

l_odd = [i for i in l if i % 2 != 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if i >= 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

Ehdollisen lausekkeen osassa voi olla useita ehtoja. Myös negatiivisia ei-merkkejä voidaan käyttää.

l_minus_or_even = [i for i in l if (i < 0) or (i % 2 == 0)]
print(l_minus_or_even)
# [-5, -4, -3, -2, -1, 0, 2, 4]

l_minus_and_odd = [i for i in l if (i < 0) and not (i % 2 == 0)]
print(l_minus_and_odd)
# [-5, -3, -1]

Korvaa tai muunna elementit, jotka täyttävät luettelon ehdot.

Edellä olevassa esimerkissä elementtien poistamisesta poistettiin elementit, jotka eivät täyttäneet ehtoja.

Jos haluat suorittaa korvauksia, muunnoksia jne. vain niille elementeille, jotka täyttävät ehdot, käytä ternäärioperaattoria listan ymmärtämisen merkintätavan lausekeosaan.

Pythonissa ternäärinen operaattori voidaan kirjoittaa seuraavasti

True Value if Conditional Expression else False Value
a = 80
x = 100 if a > 50 else 0
print(x)
# 100

b = 30
y = 100 if b > 50 else 0
print(y)
# 0

Se on hieman monimutkainen, mutta listan ymmärtämisen merkintätavan ja ternääristen operaattoreiden yhdistelmä on seuraava.

[True Value if Conditional Expression else False Value for any variable name in original list]

Suluissa oleva osa on ternäärinen operaattori (sulut eivät ole tarpeen varsinaisessa koodissa).

[(True Value if Conditional Expression else False Value) for any variable name in original list]

Jos jokin muuttujan nimi kirjoitetaan sellaisenaan tosia tai vääriä arvoja varten, alkuperäisen elementin arvoa käytetään sellaisenaan. Jos kirjoitetaan lauseke, sovelletaan kyseisen lausekkeen käsittelyä.

l_replace = [100 if i > 0 else i for i in l]
print(l_replace)
# [-5, -4, -3, -2, -1, 0, 100, 100, 100, 100, 100]

l_replace2 = [100 if i > 0 else 0 for i in l]
print(l_replace2)
# [0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100]

l_convert = [i * 10 if i % 2 == 0 else i for i in l]
print(l_convert)
# [-5, -40, -3, -20, -1, 0, 1, 20, 3, 40, 5]

l_convert2 = [i * 10 if i % 2 == 0 else i / 10 for i in l]
print(l_convert2)
# [-0.5, -40, -0.3, -20, -0.1, 0, 0.1, 20, 0.3, 40, 0.5]
Copied title and URL