V Pythone je reťazec sekvencia znakov a zoznam je kolekcia prvkov, ktoré môžu byť akéhokoľvek typu údajov vrátane reťazcov. Odčítanie zoznamu reťazcov zahŕňa odstránenie prvkov, ktoré sú spoločné medzi dvoma zoznamy alebo struny .
Ak chcete odčítať jeden zoznam reťazcov od druhého, môžete použiť 'set' dátový typ v Pythone. Nastavený dátový typ je neusporiadaná kolekcia jedinečných prvkov. Operátor odčítania '-' možno použiť medzi dvoma množinami na nájdenie prvkov v prvej množine, ktoré nie sú prítomné v druhej množine.
katrina kaif
Príklad:
Tu je príklad odčítania jedného zoznamu reťazcov od druhého pomocou nastaveného typu údajov:
list1 = ['apple', 'banana', 'cherry', 'orange'] list2 = ['banana', 'orange', 'kiwi'] result = list(set(list1) - set(list2)) print(result)
Výkon:
['apple', 'cherry']
Vo vyššie uvedenom príklade definujeme dva zoznamy, 'sheet1' a 'list2' . Potom konvertujeme každý zoznam na množinu pomocou 'set' funkciu v Pythone. Potom použijeme '-' operátora na odčítanie prvkov 'list2' od 'sheet1' . Nakoniec výslednú množinu prevedieme späť na zoznam pomocou 'zoznam' funkciu v Pythone.
Výsledkom je nový zoznam 'výsledok' ktorý obsahuje prvky 'sheet1' ktoré nie sú prítomné v 'list2' , ktorými sú v tomto prípade 'jablko' a 'čerešňa' .
Príklad:
Tu je ďalší príklad, ktorý ukazuje, ako odčítať zoznam reťazcov z jedného reťazca:
string1 = 'Hello world!' list1 = ['o', 'l', 'd'] result = ''.join([char for char in string1 if char not in list1]) print(result)
Výkon:
'He wr!'
Vo vyššie uvedenom príklade definujeme reťazec 'reťazec1' a zoznam reťazcov 'sheet1' . Potom použijeme porozumenie zoznamu na iteráciu každého znaku v 'reťazec1' a skontrolujte, či je prítomný v 'sheet1' . Ak postava nie je in 'sheet1' , pridáme ho do nového zoznamu pomocou 'pripojiť sa' metóda. Nakoniec výsledný zoznam prevedieme späť na reťazec.
Výsledkom je nový reťazec 'výsledok' ktorý obsahuje iba znaky 'reťazec1' ktoré nie sú prítomné v 'sheet1' , ktorými sú v tomto prípade 'H', 'e', ' ', 'w' , a 'r' .
Stojí za zmienku, že poradie prvkov vo výslednom zozname alebo reťazci nemusí byť zachované. Ak potrebujete zachovať poradie, môžete použiť porozumenie zoznamu s 'ak' na odfiltrovanie prvkov, ktoré sa nachádzajú v druhom zozname.
Príklad:
list1 = ['apple', 'banana', 'cherry', 'orange'] list2 = ['banana', 'orange', 'kiwi'] result = [item for item in list1 if item not in list2] print(result)
Výkon:
['apple', 'cherry']
Vo vyššie uvedenom príklade definujeme dva zoznamy, 'sheet1' a 'list2' . Potom použijeme porozumenie zoznamu na iteráciu každého prvku v 'sheet1' a skontrolujte, či je prítomný v 'list2' . Ak prvok nie je in 'list2' , pridáme ho do nového zoznamu. Nakoniec vytlačíme výsledný zoznam, ktorý obsahuje prvky z 'sheet1' ktoré nie sú prítomné v 'list2' .
java sa vytrhne zo slučky
Niektoré ďalšie informácie:
Nastaviť vs. zoznam typov údajov:
Ako už bolo spomenuté, pri odčítaní zoznamov reťazcov sa odporúča previesť zoznamy na množiny. Je to preto, že sady sú optimalizované na kontrolu existencie prvkov a odstraňovanie duplikátov. Ak je však dôležité zachovať poradie prvkov, potom môže byť lepšie použiť namiesto toho pochopenie zoznamu.
Úvahy o výkone:
Konverzia zoznamov na množiny môže byť výpočtovo nákladná operácia, najmä pri veľkých zoznamoch. Ak ide o výkon, možno budete chcieť zvážiť použitie alternatívnych prístupov, ako je porozumenie zoznamu alebo výraz generátora.
Premenlivosť:
Je dôležité poznamenať, že súpravy sú premenlivé , pričom struny a tuples (ktoré možno použiť aj ako iterovateľné dátové typy) nie sú. Znamená to, že keď odčítate množinu od inej množiny, výsledná množina je premenlivé a môžete upravovať jeho obsah. Na druhej strane, pri odčítaní zoznamu alebo n-tice od iného zoznamu alebo n-tice nie je výsledný zoznam alebo n-tica meniteľný a nemôžete upravovať jeho obsah.
Vnorené zoznamy:
Ak pracujete s vnorenými zoznamami, možno budete musieť použiť vnorenú slučku alebo rekurziu na odčítanie jedného zoznamu od druhého. Tu je prí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ýkon:
[['apple'], ['orange']]
Vo vyššie uvedenom príklade definujeme dva vnorené zoznamy, 'sheet1' a 'list2' . Potom použijeme cyklus for na iteráciu každého páru podzoznamov v 'sheet1' a 'list2' . Na odčítanie prvkov každého podzoznamu používame porozumenie zoznamu 'list2' z príslušného podzoznamu v ' list1' . Nakoniec výsledné podzoznamy pripojíme k novému zoznamu 'výsledok' .