Elementtien poistaminen listasta (matriisista) Pythonissa: clear(), pop(), remove(), del

liiketoiminta

Voit poistaa elementin listatyyppisestä listasta (array) Pythonissa käyttämällä listametodeja clear(), pop() ja remove(). Voit myös määrittää listan sijainnin ja alueen käyttämällä index- tai slice-menetelmää ja poistaa sen sitten del-lausekkeella.

Seuraavat tiedot annetaan tässä.

  • Poista kaikki elementit:clear()
  • Poistaa elementin määritetystä kohdasta ja saa sen arvon.:pop()
  • Etsii elementtejä, joilla on määritetty arvo, ja poistaa ensimmäisen elementin.:remove()
  • Poistaminen määrittämällä sijainti ja alue indeksiviipaleessa:del
  • Poistaa eräajona useita kriteerit täyttäviä elementtejä.:luetteloon sisällyttämisen merkintä

Huomaa, että luettelot voivat tallentaa erityyppisiä tietoja, ja ne eroavat selvästi matriiseista. Käytä arraya (standardikirjasto) tai NumPy:tä, kun haluat käsitellä matriiseja prosesseissa, jotka vaativat muistin kokoa tai muistiosoitetta, tai suurten tietojen numeeriseen laskentaan.

Poista kaikki elementit: clear()

Listametodissa clear() kaikki elementit poistetaan, jolloin tuloksena on tyhjä lista.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

l.clear()
print(l)
# []

Poistaa elementin määritetystä kohdasta ja saa sen arvon.: pop()

Listan metodia pop() voidaan käyttää poistamaan elementti tietystä kohdasta ja saamaan kyseisen elementin arvo.

Ensimmäinen (alku)numero on 0.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(0))
# 0

print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(3))
# 4

print(l)
# [1, 2, 3, 5, 6, 7, 8, 9]

Negatiivista arvoa voidaan käyttää myös määrittämään sijainti lopusta (viimeinen). Loppu (viimeinen) on -1.

print(l.pop(-2))
# 8

print(l)
# [1, 2, 3, 5, 6, 7, 9]

Jos argumentti jätetään pois eikä sijaintia ole määritetty, lopussa oleva (viimeinen) elementti poistetaan.

print(l.pop())
# 9

print(l)
# [1, 2, 3, 5, 6, 7]

Ei-olemassa olevan aseman antaminen johtaa virheeseen.

# print(l.pop(100))
# IndexError: pop index out of range

Huomaa, että pop(0), joka poistaa ensimmäisen elementin, vaatii seuraavat kustannukset eikä ole tehokas operaatio. Katso seuraavalta virallisen wikin sivulta eri operaatioiden laskennallinen monimutkaisuus listoille.
O(n)

O(1)Standardikirjaston collections-moduulissa on deque-tyyppi, joka poistaa elementtejä alkuun tällä kustannuksella. Jos esimerkiksi haluat käsitellä dataa jonona (FIFO), on tehokkaampaa käyttää deque-tyyppiä.

Etsii elementtejä, joilla on määritetty arvo, ja poistaa ensimmäisen elementin.: remove()

Listametodilla remove() voidaan etsiä elementtejä, joilla on sama arvo kuin määritetyllä, ja poistaa ensimmäinen elementti.

l = ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']

l.remove('Alice')
print(l)
# ['Bob', 'Charlie', 'Bob', 'Dave']

Jos luettelossa on useampi kuin yksi elementti, joka vastaa määritettyä arvoa, vain ensimmäinen poistetaan.

l.remove('Bob')
print(l)
# ['Charlie', 'Bob', 'Dave']

Jos määritetään arvo, jota ei ole olemassa, tapahtuu virhe.

# l.remove('xxx')
# ValueError: list.remove(x): x not in list

Poistaminen määrittämällä sijainti ja alue indeksiviipaleessa: del

Voit myös käyttää del-lausetta elementtien poistamiseen luettelosta.

Määritä poistettava elementti sen indeksin mukaan. Ensimmäinen (alku)indeksi on 0 ja viimeinen (loppu)indeksi on -1.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[0]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[-1]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8]

del l[6]
print(l)
# [1, 2, 3, 4, 5, 6, 8]

Jos määrität alueen viipaleilla, voit poistaa useita elementtejä kerralla.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[2:5]
print(l)
# [0, 1, 5, 6, 7, 8, 9]

l = list(range(10))
del l[:3]
print(l)
# [3, 4, 5, 6, 7, 8, 9]

l = list(range(10))
del l[4:]
print(l)
# [0, 1, 2, 3]

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

On myös mahdollista määrittää koko alue ja poistaa kaikki elementit.

l = list(range(10))
del l[:]
print(l)
# []

[start:stop:step]Jos määrittelet viipaleen alueen tällä tavalla ja määrität inkrementaalisen askeleen, voit poistaa useita hyppyelementtejä kerralla.

l = list(range(10))
del l[2:8:2]
print(l)
# [0, 1, 3, 5, 7, 8, 9]

l = list(range(10))
del l[::3]
print(l)
# [1, 2, 4, 5, 7, 8]

Lisätietoja viipaloimisesta on seuraavassa artikkelissa.

Poistaa eräajona useita kriteerit täyttäviä elementtejä.: luetteloon sisällyttämisen merkintä

Ehtojen täyttävien elementtien poistaminen vastaa prosessia, jossa jätetään (poimitaan) elementit, jotka eivät täytä ehtoja. Tällaiseen käsittelyyn käytetään listan ymmärtämisen merkintätapaa.

Alla on esimerkki parittomien tai parillisten elementtien poistamisesta (= parillisten tai parittomien elementtien jättämisestä).
%Tämä on jäännösoperaattori.
i % 2
Tämä on i:n jäännös jaettuna 2:lla.

Luettelon ymmärtämisessä luodaan uusi luettelo. Toisin kuin tähän mennessä esitellyissä listatyyppimenetelmissä, alkuperäinen lista pysyy muuttumattomana.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

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

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

print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Muita esimerkkejä. Erilaiset käsittelyt ovat mahdollisia ehdollisesta lausekkeesta riippuen.

l = ['Alice', 'Bob', 'Charlie', 'Bob', 'David']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'David']

print([s for s in l if s != 'Bob'])
# ['Alice', 'Charlie', 'David']

print([s for s in l if s.endswith('e')])
# ['Alice', 'Charlie']

Jos haluat poistaa päällekkäiset elementit, käytä set set-tyyppiä.

print(list(set(l)))
# ['David', 'Alice', 'Charlie', 'Bob']
Copied title and URL