logo

Vähennä merkkijonoluettelot Pythonissa

Pythonissa merkkijono on merkkijono, ja luettelo on kokoelma elementtejä, jotka voivat olla mitä tahansa tietotyyppiä, mukaan lukien merkkijonot. Vähennyslasku merkkijonoluettelossa poistetaan elementtejä, jotka ovat yhteisiä kahden välillä luetteloita tai jouset .

Voit vähentää merkkijonoluettelon toisesta käyttämällä 'aseta' tietotyyppi Pythonissa. Joukkotietotyyppi on yksilöivien elementtien järjestämätön kokoelma. Vähennysoperaattori '-' voidaan käyttää kahden joukon välillä etsimään ensimmäisen joukon elementit, joita ei ole toisessa joukossa.

Esimerkki:

Tässä on esimerkki merkkijonoluettelon vähentämisestä toisesta käyttämällä asetettua tietotyyppiä:

 list1 = ['apple', 'banana', 'cherry', 'orange'] list2 = ['banana', 'orange', 'kiwi'] result = list(set(list1) - set(list2)) print(result) 

Lähtö:

 ['apple', 'cherry'] 

Yllä olevassa esimerkissä määritämme kaksi luetteloa, 'arkki1' ja 'lista2' . Tämän jälkeen muunnamme jokaisen luettelon joukoksi käyttämällä 'aseta' toiminto Pythonissa. Sen jälkeen käytämme '-' -operaattori, jonka elementit vähennetään 'lista2' alkaen 'arkki1' . Lopuksi muunnamme tuloksena olevan joukon takaisin luetteloksi käyttämällä 'lista' toiminto Pythonissa.

Tämä johtaa uuteen luetteloon 'tulos' joka sisältää elementtejä 'arkki1' joita ei ole mukana 'lista2' , jotka tässä tapauksessa ovat 'omena' ja 'kirsikka' .

lajittele arraylist javassa

Esimerkki:

Tässä on toinen esimerkki, joka näyttää kuinka merkkijonoluettelo vähennetään yhdestä merkkijonosta:

 string1 = 'Hello world!' list1 = ['o', 'l', 'd'] result = ''.join([char for char in string1 if char not in list1]) print(result) 

Lähtö:

 'He wr!' 

Yllä olevassa esimerkissä määritämme merkkijonon 'string1' ja luettelo merkkijonoista 'arkki1' . Tämän jälkeen käytämme luettelon ymmärtämistä iteroidaksemme jokaisen merkin läpi 'string1' ja tarkista, onko se mukana 'arkki1' . Jos hahmo ei ole mukana 'arkki1' , lisäämme sen uuteen luetteloon käyttämällä 'liittyä seuraan' menetelmä. Lopuksi muunnamme tuloksena olevan luettelon takaisin merkkijonoksi.

Tämä johtaa uuteen merkkijonoon 'tulos' joka sisältää vain merkit 'string1' joita ei ole mukana 'arkki1' , jotka tässä tapauksessa ovat 'H', 'e', ​​' ', 'w' , ja 'r' .

On syytä huomata, että elementtien järjestystä tuloksena olevassa luettelossa tai merkkijonossa ei välttämättä säilytetä. Jos sinun on säilytettävä järjestys, voit käyttää luettelon ymmärtämistä 'jos' lauseke suodattaaksesi pois toisessa luettelossa olevat elementit.

Esimerkki:

 list1 = ['apple', 'banana', 'cherry', 'orange'] list2 = ['banana', 'orange', 'kiwi'] result = [item for item in list1 if item not in list2] print(result) 

Lähtö:

 ['apple', 'cherry'] 

Yllä olevassa esimerkissä määritämme kaksi luetteloa, 'arkki1' ja 'lista2' . Tämän jälkeen käytämme luettelon ymmärtämistä iteroidaksemme jokaisen elementin läpi 'arkki1' ja tarkista, onko se sisällä 'lista2' . Jos elementti ei ole sisällä 'lista2' , lisäämme sen uuteen luetteloon. Lopuksi tulostamme tuloksena olevan luettelon, joka sisältää elementit 'arkki1' joita ei ole mukana 'lista2' .

Muutama tieto:

Joukko vs luettelo tietotyypit:

Kuten aiemmin mainittiin, merkkijonoluetteloita vähennettäessä on suositeltavaa muuntaa listat joukoiksi. Tämä johtuu siitä, että joukot on optimoitu tarkistamaan elementtien olemassaolo ja poistamaan kaksoiskappaleita. Jos kuitenkin elementtien järjestyksen säilyttäminen on tärkeää, voi olla parempi käyttää sen sijaan luettelon ymmärtämistä.

Suorituskykyä koskevia huomioita:

Listojen muuntaminen joukoiksi voi olla laskennallisesti kallis toimenpide, etenkin suurille listoille. Jos suorituskyky on huolenaihe, sinun kannattaa harkita vaihtoehtoisten lähestymistapojen, kuten luettelon ymmärtämisen tai generaattorilausekkeen, käyttöä.

Muuttuvuus:

On tärkeää huomata, että sarjat ovat vaihteleva , kun taas jouset ja tuples (joita voidaan käyttää myös iteroitavina tietotyyppeinä) eivät ole. Se tarkoittaa, että kun vähennät joukon toisesta joukosta, tuloksena oleva joukko on vaihteleva , ja voit muokata sen sisältöä. Toisaalta, kun vähennät listaa tai monikkoa toisesta luettelosta tai moninnosta, tuloksena oleva lista tai monikko ei ole muuttuva, etkä voi muokata sen sisältöä.

Sisäkkäiset luettelot:

Jos työskentelet sisäkkäisten luetteloiden kanssa, saatat joutua käyttämään sisäkkäistä silmukkaa tai rekursiota yhden luettelon vähentämiseksi toisesta. Tässä on esimerkki:

 list1 = [['apple', 'banana'], ['cherry', 'orange']] list2 = [['banana', 'kiwi'], ['cherry', 'pear']] result = [] for sublist1, sublist2 in zip(list1, list2): subresult = [item for item in sublist1 if item not in sublist2] result.append(subresult) print(result) 

Lähtö:

 [['apple'], ['orange']] 

Yllä olevassa esimerkissä määritämme kaksi sisäkkäistä luetteloa, 'arkki1' ja 'lista2' . Tämän jälkeen käytämme for-silmukkaa toistamaan jokaisen aliluetteloparin 'arkki1' ja 'lista2' . Käytämme luettelon ymmärtämistä vähentämään kunkin aliluettelon elementit 'lista2' vastaavasta alaluettelosta ' lehti1' . Lopuksi liitämme tuloksena saadut aliluettelot uuteen luetteloon 'tulos' .