logo

Atimkite stygų sąrašus Python

Python programoje eilutė yra simbolių seka, o sąrašas yra elementų, kurie gali būti bet kokio tipo duomenų, įskaitant eilutes, rinkinys. Atimtis eilučių sąraše pašalinami elementai, kurie yra bendri tarp dviejų sąrašus arba stygos .

Norėdami atimti vieną eilučių sąrašą iš kito, galite naudoti 'nustatyti' duomenų tipas Python. Rinkinio duomenų tipas yra netvarkingas unikalių elementų rinkinys. Atimties operatorius '-' gali būti naudojamas tarp dviejų rinkinių, norint rasti pirmojo rinkinio elementus, kurių nėra antrajame rinkinyje.

Pavyzdys:

Štai pavyzdys, kaip atimti vieną eilučių sąrašą iš kito naudojant nustatytą duomenų tipą:

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

Išvestis:

 ['apple', 'cherry'] 

Aukščiau pateiktame pavyzdyje apibrėžiame du sąrašus, 'lapas1' ir 'sąrašas2' . Po to kiekvieną sąrašą konvertuojame į rinkinį naudodami 'nustatyti' funkcija Python. Po to mes naudojame '-' operatorius atimti elementus 'sąrašas2' 'lapas1' . Galiausiai gautą rinkinį konvertuojame atgal į sąrašą naudodami 'sąrašas' funkcija Python.

Dėl to susidaro naujas sąrašas 'rezultatas' kuriame yra elementai 'lapas1' kurių nėra 'sąrašas2' , kurios šiuo atveju yra 'obuolys' ir 'vyšnia' .

Pavyzdys:

Štai dar vienas pavyzdys, rodantis, kaip iš vienos eilutės atimti eilučių sąrašą:

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

Išvestis:

 'He wr!' 

Aukščiau pateiktame pavyzdyje apibrėžiame eilutę 'string1' ir stygų sąrašas 'lapas1' . Po to mes naudojame sąrašo supratimą, kad kartotume kiekvieną simbolį 'string1' ir patikrinkite, ar jis yra 'lapas1' . Jei veikėjo nėra 'lapas1' , įtraukiame jį į naują sąrašą naudodami 'prisijungti' metodas. Galiausiai gautą sąrašą paverčiame atgal į eilutę.

Dėl to atsiranda nauja eilutė 'rezultatas' kuriame yra tik simboliai 'string1' kurių nėra 'lapas1' , kurios šiuo atveju yra „H“, „e“, „“, „w“ , ir 'r' .

Verta paminėti, kad elementų tvarka gautame sąraše arba eilutėje gali būti neišsaugota. Jei reikia išsaugoti tvarką, galite naudoti sąrašo supratimą su 'jei' teiginį, kad išfiltruotų elementus, esančius antrajame sąraše.

Pavyzdys:

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

Išvestis:

 ['apple', 'cherry'] 

Aukščiau pateiktame pavyzdyje apibrėžiame du sąrašus, 'lapas1' ir 'sąrašas2' . Po to mes naudojame sąrašo supratimą, kad kartotume kiekvieną elementą 'lapas1' ir patikrinkite, ar jis yra 'sąrašas2' . Jei elemento nėra 'sąrašas2' , įtraukiame jį į naują sąrašą. Galiausiai išspausdiname gautą sąrašą, kuriame yra elementai 'lapas1' kurių nėra 'sąrašas2' .

Dar šiek tiek informacijos:

Nustatyti ir sąrašo duomenų tipai:

Kaip minėta anksčiau, atimant eilučių sąrašus, rekomenduojama sąrašus konvertuoti į rinkinius. Taip yra todėl, kad rinkiniai yra optimizuoti elementų egzistavimui ir dublikatų pašalinimui. Tačiau, jei svarbu išlaikyti elementų tvarką, geriau naudoti sąrašo supratimą.

Našumo aspektai:

Sąrašų konvertavimas į rinkinius gali būti brangus skaičiavimas, ypač dideliems sąrašams. Jei našumas kelia susirūpinimą, galbūt norėsite naudoti alternatyvius metodus, pvz., sąrašo supratimą arba generatoriaus išraišką.

Kintamumas:

Svarbu pažymėti, kad rinkiniai yra kintamas , o stygos ir korteles (kurie taip pat gali būti naudojami kaip kartojami duomenų tipai) nėra. Tai reiškia, kad atėmus aibę iš kitos aibės, gaunama aibė yra kintamas ir galite keisti jo turinį. Kita vertus, atimant sąrašą ar eilutę iš kito sąrašo ar eilės, gautas sąrašas ar eilė nekeičiamas ir negalite keisti jo turinio.

Įdėtieji sąrašai:

Jei dirbate su įdėtais sąrašais, norint atimti vieną sąrašą iš kito, gali tekti naudoti įdėtą kilpą arba rekursiją. Štai pavyzdys:

 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) 

Išvestis:

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

Aukščiau pateiktame pavyzdyje apibrėžiame du įdėtus sąrašus, 'lapas1' ir 'sąrašas2' . Po to mes naudojame for kilpą, kad kartotume kiekvieną subsąrašų porą 'lapas1' ir 'sąrašas2' . Mes naudojame sąrašo supratimą, kad atimtume kiekvieno subsąrašo elementus 'sąrašas2' iš atitinkamo posąrašo „ lapas1' . Galiausiai gautus posąraščius pridedame prie naujo sąrašo 'rezultatas' .