logo

Odečíst seznamy řetězců v Pythonu

V Pythonu je řetězec posloupností znaků a seznam je kolekce prvků, které mohou být libovolného datového typu, včetně řetězců. Odčítání seznamu řetězců zahrnuje odstranění prvků, které jsou společné mezi dvěma seznamy nebo struny .

Chcete-li odečíst jeden seznam řetězců od druhého, můžete použít 'soubor' datový typ v Pythonu. Nastavený datový typ je neuspořádaná kolekce jedinečných prvků. Operátor odčítání '-' lze použít mezi dvěma sadami k nalezení prvků v první sadě, které nejsou přítomny ve druhé sadě.

Příklad:

Zde je příklad odečtení jednoho seznamu řetězců od druhého pomocí nastaveného datového typu:

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

Výstup:

 ['apple', 'cherry'] 

Ve výše uvedeném příkladu definujeme dva seznamy, 'list1' a 'list2' . Poté převedeme každý seznam na sadu pomocí 'soubor' funkce v Pythonu. Poté použijeme '-' operátor odečíst prvky 'list2' z 'list1' . Nakonec výslednou sadu převedeme zpět na seznam pomocí 'seznam' funkce v Pythonu.

Výsledkem je nový seznam 'výsledek' která obsahuje prvky 'list1' které nejsou přítomny v 'list2' , což jsou v tomto případě 'jablko' a 'třešeň' .

Příklad:

Zde je další příklad, který ukazuje, jak odečíst seznam řetězců od jednoho řetězce:

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

Výstup:

 'He wr!' 

Ve výše uvedeném příkladu definujeme řetězec 'řetězec1' a seznam řetězců 'list1' . Poté použijeme porozumění seznamu k iteraci každého znaku v 'řetězec1' a zkontrolujte, zda je přítomen v 'list1' . Pokud postava není in 'list1' , přidáme jej do nového seznamu pomocí 'připojit se' metoda. Nakonec výsledný seznam převedeme zpět na řetězec.

Výsledkem je nový řetězec 'výsledek' který obsahuje pouze znaky 'řetězec1' které nejsou přítomny v 'list1' , což jsou v tomto případě 'H', 'e', ​​' ', 'w' , a 'r' .

Stojí za zmínku, že pořadí prvků ve výsledném seznamu nebo řetězci nemusí být zachováno. Pokud potřebujete zachovat pořadí, můžete použít porozumění seznamu s příponou 'li' příkaz k odfiltrování prvků, které jsou přítomny ve druhém seznamu.

Příklad:

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

Výstup:

 ['apple', 'cherry'] 

Ve výše uvedeném příkladu definujeme dva seznamy, 'list1' a 'list2' . Poté použijeme porozumění seznamu k iteraci každého prvku v 'list1' a zkontrolujte, zda je přítomen v 'list2' . Pokud prvek není in 'list2' , přidáme jej do nového seznamu. Nakonec vytiskneme výsledný seznam, který obsahuje prvky z 'list1' které nejsou přítomny v 'list2' .

Některé další informace:

Nastavit vs. seznam datových typů:

Jak již bylo zmíněno dříve, při odečítání seznamů řetězců se doporučuje převést seznamy na sady. Je to proto, že sady jsou optimalizovány pro kontrolu existence prvků a odstraňování duplicit. Pokud je však důležité zachovat pořadí prvků, může být lepší použít místo toho porozumění seznamu.

Výkonnostní aspekty:

Převod seznamů na sady může být výpočetně nákladná operace, zejména u velkých seznamů. Pokud jde o výkon, můžete zvážit použití alternativních přístupů, jako je porozumění seznamu nebo výraz generátoru.

Proměnlivost:

Je důležité si uvědomit, že sady jsou proměnlivý , zatímco struny a n-tice (které lze také použít jako iterovatelné datové typy) nejsou. To znamená, že když odečtete množinu od jiné množiny, výsledná množina je proměnlivý a můžete upravit jeho obsah. Na druhou stranu, když odečítáte seznam nebo n-tice od jiného seznamu nebo n-tice, výsledný seznam nebo n-tice není měnitelný a nemůžete upravovat jeho obsah.

Vnořené seznamy:

Pokud pracujete s vnořenými seznamy, možná budete muset použít vnořenou smyčku nebo rekurzi k odečtení jednoho seznamu od druhého. Zde je příklad:

 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) 

Výstup:

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

Ve výše uvedeném příkladu definujeme dva vnořené seznamy, 'list1' a 'list2' . Poté použijeme cyklus for k iteraci přes každou dvojici dílčích seznamů v 'list1' a 'list2' . K odečtení prvků každého dílčího seznamu používáme porozumění seznamu 'list2' z odpovídajícího podseznamu v ' list1' . Nakonec výsledné podseznamy připojíme k novému seznamu 'výsledek' .