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' .