logo

Subtrahera stränglistor i Python

I Python är en sträng en sekvens av tecken, och en lista är en samling element som kan vara av vilken datatyp som helst, inklusive strängar. Subtraktion av en stränglista innebär att element som är gemensamma mellan två tas bort listor eller strängar .

För att subtrahera en stränglista från en annan kan du använda 'uppsättning' datatyp i Python. Den inställda datatypen är en oordnad samling av unika element. Subtraktionsoperatorn '-' kan användas mellan två uppsättningar för att hitta de element i den första uppsättningen som inte finns i den andra uppsättningen.

Exempel:

Här är ett exempel på att subtrahera en stränglista från en annan med den inställda datatypen:

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

Produktion:

 ['apple', 'cherry'] 

I exemplet ovan definierar vi två listor, 'ark1' och 'lista2' . Efter det konverterar vi varje lista till en uppsättning med hjälp av 'uppsättning' funktion i Python. Efter det använder vi '-' operatör att subtrahera elementen i 'lista2' från 'ark1' . Slutligen konverterar vi den resulterande uppsättningen tillbaka till en lista med hjälp av 'lista' funktion i Python.

Detta resulterar i en ny lista 'resultat' som innehåller elementen av 'ark1' som inte finns i 'lista2' , vilket i detta fall är 'äpple' och 'körsbär' .

Exempel:

Här är ett annat exempel som visar hur man subtraherar en lista med strängar från en enda sträng:

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

Produktion:

 'He wr!' 

I exemplet ovan definierar vi en sträng 'sträng1' och en lista med strängar 'ark1' . Efter det använder vi en listförståelse för att iterera över varje tecken i 'sträng1' och kontrollera om den finns i 'ark1' . Om karaktären inte är med 'ark1' lägger vi till den i en ny lista med hjälp av 'Ansluta sig' metod. Slutligen konverterar vi den resulterande listan tillbaka till en sträng.

Detta resulterar i en ny sträng 'resultat' som bara innehåller tecken från 'sträng1' som inte finns i 'ark1' , vilket i detta fall är 'H', 'e', ​​'' ', 'w' , och 'r' .

Det är värt att notera att ordningen på elementen i den resulterande listan eller strängen kanske inte bevaras. Om du behöver bevara ordningen kan du använda en listförståelse med en 'om' för att filtrera bort de element som finns i den andra listan.

Exempel:

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

Produktion:

 ['apple', 'cherry'] 

I exemplet ovan definierar vi två listor, 'ark1' och 'lista2' . Efter det använder vi en listförståelse för att iterera över varje element i 'ark1' och kontrollera om den finns i 'lista2' . Om elementet inte är i 'lista2' lägger vi till den i en ny lista. Slutligen skriver vi ut den resulterande listan, som innehåller delarna av 'ark1' som inte finns i 'lista2' .

Lite annan information:

Ange vs listdatatyper:

Som tidigare nämnts, när du subtraherar stränglistor, rekommenderas det att konvertera listorna till uppsättningar. Det beror på att set är optimerade för att kontrollera om det finns element och ta bort dubbletter. Men om det är viktigt att bevara ordningen på elementen, kan det vara bättre att använda en listförståelse istället.

Prestandaöverväganden:

Att konvertera listor till uppsättningar kan vara en beräkningsmässigt dyr operation, särskilt för stora listor. Om prestanda är ett problem kan du överväga att använda alternativa metoder som listförståelse eller ett generatoruttryck.

Föränderlighet:

Det är viktigt att notera att set är föränderlig , medan strängar och tupler (som också kan användas som itererbara datatyper) är det inte. Det betyder att när du subtraherar en uppsättning från en annan uppsättning, är den resulterande uppsättningen föränderlig , och du kan ändra dess innehåll. Å andra sidan, när du subtraherar en lista eller tuppel från en annan lista eller tuppel, är den resulterande listan eller tuppeln inte föränderlig, och du kan inte ändra dess innehåll.

Kapslade listor:

Om du arbetar med kapslade listor kan du behöva använda en kapslad loop eller rekursion för att subtrahera en lista från en annan. Här är ett exempel:

 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) 

Produktion:

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

I exemplet ovan definierar vi två kapslade listor, 'ark1' och 'lista2' . Efter det använder vi en for-loop för att iterera över varje par av underlistor i 'ark1' och 'lista2' . Vi använder en listförståelse för att subtrahera elementen i varje underlista 'lista2' från motsvarande underlista i ' blad1' . Slutligen lägger vi till de resulterande underlistorna till en ny lista 'resultat' .