logo

Popisi oduzimanja nizova u Pythonu

U Pythonu niz je niz znakova, a popis je skup elemenata koji mogu biti bilo koje vrste podataka, uključujući nizove. Oduzimanje popisa nizova uključuje uklanjanje elemenata koji su zajednički između dva popisi ili žice .

Za oduzimanje jednog popisa nizova od drugog, možete koristiti 'set' tip podataka u Pythonu. Skupni tip podataka je neuređena zbirka jedinstvenih elemenata. Operator oduzimanja '-' može se koristiti između dva skupa za pronalaženje elemenata u prvom skupu koji nisu prisutni u drugom skupu.

Primjer:

Evo primjera oduzimanja jednog popisa nizova od drugog pomoću vrste podataka set:

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

Izlaz:

 ['apple', 'cherry'] 

U gornjem primjeru definiramo dvije liste, 'list1' i 'list2' . Nakon toga svaki popis pretvaramo u skup pomoću 'set' funkcija u Pythonu. Nakon toga koristimo '-' operator za oduzimanje elemenata 'list2' iz 'list1' . Konačno, rezultirajući skup pretvaramo natrag u popis pomoću 'popis' funkcija u Pythonu.

To rezultira novim popisom 'proizlaziti' koji sadrži elemente 'list1' koji nisu prisutni u 'list2' , što u ovom slučaju jesu 'jabuka' i 'trešnja' .

Primjer:

Evo još jednog primjera koji pokazuje kako od jednog niza oduzeti popis nizova:

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

Izlaz:

 'He wr!' 

U gornjem primjeru definiramo niz 'string1' i popis nizova 'list1' . Nakon toga koristimo razumijevanje popisa za ponavljanje svakog znaka 'string1' i provjerite je li prisutan u 'list1' . Ako lik nije in 'list1' , dodajemo ga na novi popis pomoću 'pridružiti' metoda. Konačno, rezultirajući popis pretvaramo natrag u niz.

To rezultira novim nizom 'proizlaziti' koji sadrži samo znakove 'string1' koji nisu prisutni u 'list1' , što u ovom slučaju jesu 'H', 'e', ​​​​' ', 'w' , i 'r' .

Vrijedno je napomenuti da redoslijed elemenata u rezultirajućem popisu ili nizu možda neće biti sačuvan. Ako trebate sačuvati redoslijed, možete koristiti razumijevanje popisa s 'ako' naredbu za filtriranje elemenata koji su prisutni na drugom popisu.

stog u ds

Primjer:

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

Izlaz:

 ['apple', 'cherry'] 

U gornjem primjeru definiramo dvije liste, 'list1' i 'list2' . Nakon toga koristimo razumijevanje popisa za ponavljanje svakog elementa 'list1' i provjerite je li prisutan u 'list2' . Ako element nije unutra 'list2' , dodajemo ga na novi popis. Na kraju ispisujemo dobiveni popis koji sadrži elemente 'list1' koji nisu prisutni u 'list2' .

Još neke informacije:

Vrste podataka skupa u odnosu na popis:

Kao što je ranije spomenuto, pri oduzimanju popisa nizova, preporučuje se pretvaranje popisa u skupove. To je zato što su skupovi optimizirani za provjeru postojanja elemenata i uklanjanje duplikata. Međutim, ako je očuvanje redoslijeda elemenata važno, možda bi bilo bolje umjesto toga upotrijebiti razumijevanje popisa.

Razmatranja izvedbe:

Pretvaranje popisa u skupove može biti računski skupa operacija, posebno za velike popise. Ako je izvedba problem, razmislite o korištenju alternativnih pristupa kao što je razumijevanje popisa ili izraz generatora.

Promjenjivost:

Važno je napomenuti da su setovi promjenjiv , dok nizovi i tuples (koji se također mogu koristiti kao tipovi podataka koji se mogu ponavljati) nisu. To znači da kada oduzmete skup od drugog skupa, dobiveni skup je promjenjiv , a možete mijenjati njegov sadržaj. S druge strane, kada oduzimate popis ili tuple od drugog popisa ili tuplea, rezultirajući popis ili tuple nisu promjenjivi i ne možete mijenjati njihov sadržaj.

Ugniježđene liste:

Ako radite s ugniježđenim popisima, možda ćete trebati koristiti ugniježđenu petlju ili rekurziju za oduzimanje jednog popisa od drugog. Evo primjera:

 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) 

Izlaz:

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

U gornjem primjeru definiramo dvije ugniježđene liste, 'list1' i 'list2' . Nakon toga koristimo petlju for za ponavljanje svakog para podlista 'list1' i 'list2' . Koristimo razumijevanje popisa za oduzimanje elemenata svakog podpopisa 'list2' iz odgovarajućeg podpopisa u ' list1' . Na kraju dodajemo dobivene podpopise na novi popis 'proizlaziti' .