Scheid woorden op witruimte
Laat words de woorden als lijst teruggeven, met opeenvolgende witruimte als één grens en zonder lege buitenste delen.
Een reservering komt binnen als één regel tekst, terwijl je programma losse bestemmingen nodig heeft. Later wil je die bestemmingen weer als een nette zin tonen. Je gaat daarom van tekst naar een lijst en met een gekozen scheidingsteken weer terug.
Een scheidingsteken markeert de grens tussen onderdelen. Met text.split(";") gebruik je een puntkomma als grens. Het resultaat is een lijst met strings: ieder gevonden onderdeel blijft tekst, ook wanneer het alleen cijfers bevat.
Een leeg onderdeel kan betekenis hebben. Bij "naam;;plaats" ontbreekt het middelste veld, dus de lijst bevat daar een lege string. Een puntkomma aan het einde maakt eveneens een leeg laatste veld; Python gooit die informatie niet weg.
Zonder argument werkt split() anders. Dan vormen opeenvolgende spaties, tabs en regeleinden samen een grens en verdwijnen lege delen aan de buitenkant. Zulke onzichtbare tekens noemen we witruimte.
| Keuze | Wat blijft er over? |
|---|---|
split() | Woorden, zonder lege stukken door witruimte |
split(";") | Velden, inclusief ontbrekende waarden |
split("=", 1) | Hoogstens twee delen, na de eerste grens |
Die laatste één is het maximale aantal splitsingen. De rest blijft bij het tweede deel, ook wanneer daarin nog een gelijkteken staat. Staat er geen gelijkteken, dan bevat de lijst alleen de oorspronkelijke tekst.
Met join verbind je strings uit een lijst. Het scheidingsteken staat vóór de punt: " / ".join(names) zet precies die tekst tussen twee opeenvolgende namen. Bij één naam is er geen tussenruimte nodig; bij een lege lijst is het resultaat leeg.
Voorspel de lijsten en de samengestelde regel in dit zelfstandige voorbeeld. Kijk vooral naar het verschil tussen woorden scheiden en lege velden behouden.
note = " fiets trein\tbus "
print(note.split())
print("A;;C;".split(";"))
names = ["Noord", "Zuid"]
print(" / ".join(names))
print("route=pad=bos".split("=", 1))['fiets', 'trein', 'bus'] ['A', '', 'C', ''] Noord / Zuid ['route', 'pad=bos']
De dubbele punt en schuine streep in de uitvoer komen niet vanzelf uit de lijst. De string waarop je join aanroept bepaalt wat ertussen verschijnt. Zo kun je dezelfde onderdelen op verschillende manieren tonen zonder de oorspronkelijke lijst te veranderen.
Het voelt misschien logisch om een lijst te vragen zichzelf samen te voegen. In Python hoort deze methode echter bij de string die als scheidingsteken dient. Voer de foutvariant uit en lees welk object de methode niet heeft.
places = ["Haarlem", "Zwolle"]
print(places.join(" / "))AttributeError: 'list' object has no attribute 'join'
Je krijgt AttributeError: een lijst heeft geen methode met die naam. De reparatie is de volgorde omdraaien, bijvoorbeeld " / ".join(places). Alle onderdelen moeten daarbij strings zijn; getallen moet je eerst bewust naar tekst omzetten.
De functies in de opdrachten krijgen steeds strings of een lijst met strings. words gebruikt witruimte als grens, terwijl fields ieder puntkommaveld moet behouden. Een ontbrekend veld is iets anders dan een woord dat niet bestaat.
first_pair splitst alleen het eerste gelijkteken. Zij geeft ook bij ontbrekende of lege tekst gewoon de lijst van split terug. join_labels gebruikt precies het meegegeven scheidingsteken, inclusief eventuele spaties.
Laat words de woorden als lijst teruggeven, met opeenvolgende witruimte als één grens en zonder lege buitenste delen.
Laat fields op iedere puntkomma splitsen en lege velden op hun oorspronkelijke positie behouden.
Laat join_labels de lijst strings verbinden met precies separator tussen opeenvolgende onderdelen. Verander de invoerlijst niet.
Laat first_pair op hoogstens het eerste gelijkteken splitsen. Behoud ieder later gelijkteken in het tweede deel.
split opeenvolgende witruimte als één grens.join uit; een maximum beperkt het aantal splitsingen.Hierna zoek je in tekst en verwijder je alleen een werkelijk aanwezig voorvoegsel.
Voer je code uit en ontdek
wat je hebt gemaakt.
Je hoeft het niet in één keer goed te doen. Na het uitvoeren zie je hier welke stappen al kloppen.