logo

Odštevanje seznamov nizov v Pythonu

V Pythonu je niz zaporedje znakov, seznam pa je zbirka elementov, ki so lahko katere koli vrste podatkov, vključno z nizi. Odštevanje seznama nizov vključuje odstranjevanje elementov, ki so skupni dvema seznami oz strune .

Če želite odšteti en seznam nizov od drugega, lahko uporabite 'set' podatkovni tip v Pythonu. Podatkovni tip niza je neurejena zbirka edinstvenih elementov. Operator odštevanja '-' se lahko uporablja med dvema nizoma za iskanje elementov v prvem nizu, ki niso prisotni v drugem nizu.

primer:

Tukaj je primer odštevanja enega seznama nizov od drugega z uporabo nastavljenega podatkovnega tipa:

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

Izhod:

 ['apple', 'cherry'] 

V zgornjem primeru definiramo dva seznama, 'sheet1' in 'seznam2' . Nato vsak seznam pretvorimo v niz z uporabo 'set' funkcijo v Pythonu. Po tem uporabimo '-' operator za odštevanje elementov 'seznam2' od 'sheet1' . Končno pretvorimo nastali niz nazaj v seznam z uporabo 'seznam' funkcijo v Pythonu.

Posledica tega je nov seznam 'rezultat' ki vsebuje elemente 'sheet1' ki jih ni v 'seznam2' , ki sta v tem primeru 'jabolko' in 'češnja' .

primer:

Tu je še en primer, ki prikazuje, kako od enega samega niza odšteti seznam nizov:

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

Izhod:

 'He wr!' 

V zgornjem primeru definiramo niz 'niz1' in seznam nizov 'sheet1' . Nato uporabimo razumevanje seznama za ponavljanje vsakega znaka v 'niz1' in preverite, ali je prisoten v 'sheet1' . Če znak ni v 'sheet1' , ga dodamo na nov seznam z uporabo 'pridruži se' metoda. Končno pretvorimo nastali seznam nazaj v niz.

Posledica tega je nov niz 'rezultat' ki vsebuje samo znake 'niz1' ki jih ni v 'sheet1' , ki sta v tem primeru 'H', 'e', ​​​​' ', 'w' , in 'r' .

Omeniti velja, da vrstni red elementov na nastalem seznamu ali nizu morda ne bo ohranjen. Če želite ohraniti vrstni red, lahko uporabite razumevanje seznama z 'če' stavek za filtriranje elementov, ki so prisotni na drugem seznamu.

primer:

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

Izhod:

 ['apple', 'cherry'] 

V zgornjem primeru definiramo dva seznama, 'sheet1' in 'seznam2' . Nato uporabimo razumevanje seznama za ponavljanje vsakega elementa v 'sheet1' in preverite, ali je prisoten v 'seznam2' . Če elementa ni v 'seznam2' , ga dodamo na nov seznam. Na koncu natisnemo nastali seznam, ki vsebuje elemente 'sheet1' ki jih ni v 'seznam2' .

Še nekaj informacij:

Vrste podatkov Set vs List:

Kot smo že omenili, je pri odštevanju seznamov nizov priporočljivo pretvoriti sezname v nize. To je zato, ker so nizi optimizirani za preverjanje obstoja elementov in odstranjevanje dvojnikov. Če pa je ohranjanje vrstnega reda elementov pomembno, je morda bolje, da namesto tega uporabite razumevanje seznama.

Premisleki o uspešnosti:

Pretvarjanje seznamov v nize je lahko računsko draga operacija, zlasti za velike sezname. Če je učinkovitost zaskrbljujoča, boste morda želeli razmisliti o uporabi alternativnih pristopov, kot je razumevanje seznama ali generatorski izraz.

prečrtana markdown

Spremenljivost:

Pomembno je omeniti, da so kompleti spremenljiv , medtem ko strune in tuples (ki se lahko uporabljajo tudi kot ponovljivi tipi podatkov) niso. To pomeni, da ko odštejete niz od drugega niza, je nastali niz spremenljiv in lahko spreminjate njegovo vsebino. Po drugi strani pa pri odštevanju seznama ali tuple od drugega seznama ali tuple nastali seznam ali tuple ni spremenljiv in ne morete spreminjati njegove vsebine.

Ugnezdeni seznami:

Če delate z ugnezdenimi seznami, boste morda morali uporabiti ugnezdeno zanko ali rekurzijo za odštevanje enega seznama od drugega. Tukaj je primer:

 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) 

Izhod:

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

V zgornjem primeru definiramo dva ugnezdena seznama, 'sheet1' in 'seznam2' . Po tem uporabimo zanko for za ponavljanje vsakega para podseznamov 'sheet1' in 'seznam2' . Za odštevanje elementov vsakega podseznama uporabljamo razumevanje seznama 'seznam2' z ustreznega podseznama v ' list1' . Na koncu dodamo nastale podsezname na nov seznam 'rezultat' .