logo

Tekenreekslijsten aftrekken in Python

In Python is een string een reeks tekens, en een lijst een verzameling elementen die van elk gegevenstype kunnen zijn, inclusief strings. Aftrekken van een stringlijst omvat het verwijderen van elementen die gemeenschappelijk zijn tussen twee lijsten of snaren .

Om de ene stringlijst van de andere af te trekken, kunt u de 'set' gegevenstype in Python. Het ingestelde gegevenstype is een ongeordende verzameling unieke elementen. De aftrekkingsoperator '-' kan tussen twee sets worden gebruikt om de elementen in de eerste set te vinden die niet aanwezig zijn in de tweede set.

Voorbeeld:

Hier is een voorbeeld van het aftrekken van de ene stringlijst van de andere met behulp van het ingestelde gegevenstype:

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

Uitgang:

 ['apple', 'cherry'] 

In het bovenstaande voorbeeld definiëren we twee lijsten, 'blad1' En 'lijst2' . Daarna converteren we elke lijst naar een set met behulp van de 'set' functie in Python. Daarna gebruiken we de '-' operator om de elementen van af te trekken 'lijst2' van 'blad1' . Ten slotte converteren we de resulterende set terug naar een lijst met behulp van de 'lijst' functie in Python.

Dit resulteert in een nieuwe lijst 'resultaat' dat de elementen bevat van 'blad1' die er niet in voorkomen 'lijst2' , wat in dit geval het geval is 'appel' En 'kers' .

Voorbeeld:

Hier is nog een voorbeeld dat laat zien hoe je een lijst met tekenreeksen van een enkele tekenreeks kunt aftrekken:

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

Uitgang:

 'He wr!' 

In het bovenstaande voorbeeld definiëren we een string 'tekenreeks1' en een lijst met strings 'blad1' . Daarna gebruiken we een lijstbegrip om elk teken te herhalen 'tekenreeks1' en controleer of deze aanwezig is 'blad1' . Als het personage er niet in zit 'blad1' , voegen we het toe aan een nieuwe lijst met behulp van de 'meedoen' methode. Ten slotte converteren we de resulterende lijst terug naar een string.

Dit resulteert in een nieuwe string 'resultaat' dat alleen de karakters bevat van 'tekenreeks1' die er niet in voorkomen 'blad1' , wat in dit geval het geval is 'H', 'e', ​​'' ', 'w' , En 'R' .

Het is vermeldenswaard dat de volgorde van de elementen in de resulterende lijst of string mogelijk niet behouden blijft. Als u de volgorde wilt behouden, kunt u een lijstbegrip gebruiken met een 'als' statement om de elementen uit de tweede lijst te filteren.

Voorbeeld:

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

Uitgang:

 ['apple', 'cherry'] 

In het bovenstaande voorbeeld definiëren we twee lijsten, 'blad1' En 'lijst2' . Daarna gebruiken we een lijstbegrip om elk element in te herhalen 'blad1' en controleer of deze aanwezig is 'lijst2' . Als het element er niet in zit 'lijst2' , voegen we het toe aan een nieuwe lijst. Ten slotte drukken we de resulterende lijst af, die de elementen bevat van 'blad1' die er niet in voorkomen 'lijst2' .

Nog wat andere informatie:

Gegevenstypen instellen versus lijst:

Zoals eerder vermeld, wordt het aanbevolen om bij het aftrekken van stringlijsten de lijsten naar sets te converteren. Dit komt omdat sets zijn geoptimaliseerd voor het controleren op het bestaan ​​van elementen en het verwijderen van duplicaten. Als het echter belangrijk is om de volgorde van de elementen te behouden, kan het beter zijn om in plaats daarvan een lijstbegrip te gebruiken.

Prestatieoverwegingen:

Het converteren van lijsten naar sets kan een rekenintensieve bewerking zijn, vooral voor grote lijsten. Als prestaties een probleem zijn, kunt u overwegen om alternatieve benaderingen te gebruiken, zoals het begrijpen van lijsten of een generatorexpressie.

Veranderlijkheid:

Het is belangrijk op te merken dat sets dat wel zijn veranderlijk , terwijl tekenreeksen en tupels (die ook kunnen worden gebruikt als iterabele gegevenstypen) zijn dat niet. Het betekent dat wanneer je een set van een andere set aftrekt, de resulterende set dat is veranderlijk en u kunt de inhoud ervan wijzigen. Wanneer u daarentegen een lijst of tupel van een andere lijst of tupel aftrekt, is de resulterende lijst of tupel niet veranderlijk en kunt u de inhoud ervan niet wijzigen.

Geneste lijsten:

Als u met geneste lijsten werkt, moet u mogelijk een geneste lus of recursie gebruiken om de ene lijst van de andere af te trekken. Hier is een voorbeeld:

 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) 

Uitgang:

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

In het bovenstaande voorbeeld definiëren we twee geneste lijsten, 'blad1' En 'lijst2' . Daarna gebruiken we een for-lus om elk paar sublijsten te doorlopen 'blad1' En 'lijst2' . We gebruiken een lijstbegrip om de elementen van elke sublijst af te trekken 'lijst2' uit de overeenkomstige sublijst in ' blad1' . Ten slotte voegen we de resulterende sublijsten toe aan een nieuwe lijst 'resultaat' .