Göm menyn

Strängar

Vad är en sträng?

Strängar är sekvenser av tecken som innesluts av enkla eller dubbla citationstecken. En sträng är likt en lista en sammansatt datatyp. Med listor kunde vi blanda våra datatyper, det vill säga vi kunde ha en lista med både tal och tecken i. Detta är inte fallet med strängar som bara består av tecken. Strängar är också oföränderliga (eng. immutable) vilket betyder att innehållet inte kan ändras efter att strängen har skapats.

Strängar kan även innehålla specialtecken som markeras med ett bakåtsträck \. Några exempel på strängar:

Dokumentation

Indexering och slicing

Precis som med listor kan vi indexera och plocka ut delar av strängar.

  • 'sträng[N]' hämtar ut elementet på plats N. N kan även vara negativt, där -1 är det sista tecknet i strängen.
  • 'sträng[start:slut]' skapar en delsträng från start till elementet precis före slut, där både start och slut är frivilliga argument.
  • 'sträng[start:slut:steg]' skapar en delsträng från start till elementet precis före slut med intervallet steg, där både start, slut och steg är frivilliga argument.

Oföränderlighet

Vi nämnde tidigare att strängar är oföränderliga, det vill säga att innehållet i en sträng inte kan ändras efter att strängen har skapats. Vad händer om man försöker ändra innehållet i en sträng?

Om vi vill ändra en sträng så måste vi istället skapa en ny sträng.

Jämförelser med strängar

Vi kan även göra jämförelser med strängar på samma sätt som vi har sett med siffror. När vi till exempel använder operatorerna < och > så är det bokstavsordningen som används.

Operationer på strängar

Vad kan vi göra med våra strängar då, det vill säga vilka operationer kan vi använda oss av?

Operation Vad händer?
s + s Konkatinering (sammanslagning)
s * 4 Upprepning
s[3] Indexering
s[1:3] Slicing (ta ut delsträngar)
len(s) Längden av strängen
for c in s: ... Iterera över tecknen i strängen

Exempel 1 - Byta ut tecken

Vi vill ha en funktion change som tar en sträng och byter ut alla förekomster av ett visst tecken mot ett annat (genom att skapa en ny sträng givetvis). Det ska fungera så här:

I kod kan vi uttrycka det så här:

Idén bakom funktionen är att iterera över strängen, tecken för tecken, och jämföra varje tecken med tecknet som ska ersättas. Om de är samma lägger vill till ersättningstecknet på slutet av vår resultatsträng. Annars lägger vi det nuvarande tecknet på resultatsträngen.

Exempel 2 - Hitta en delsträng

Vi vill ha en funktion locate som kollar om en delsträng (eng. substring) finns någonstans i en längre sträng. Om så är fallet returneras indexet till den första förekomsten av delsträngen i strängen, annars returneras -1.

Hur kan vi implementera detta? Innan vi skriver kod kan det vara bra att se hur vi kan ta oss an problemet.

När vi har en klar bild över hur vi vill ha det kan vi implementera det i kod.

Lagring av strängar

En sträng är i grunden en form av lista med siffror, där varje siffra tolkas som ett tecken. Funktionen ord (eng. ordinal) tar en bokstav och returnerar den siffra som lagras. På samma sätt tar funktionen chr (eng. char) ett heltal och returnerar den bokstav som siffran kodar.

Olika teckenkodningar

En teckenkodning är ett sätt att representera en grupp av tecken i form av olika koder. Här kommer några av de vanligaste:

  • ASCII (American Standard Code for Information Interchange) från 1963 är en teckenkodning som tilldelar talen 0-127 olika tecken, men som saknar t.ex. svenska bokstäver.
  • ISO 8859-1 (även kallad Latin-1) är en utökning som tilldelar talen 0-255 olika tecken och som inkluderar svenska och många andra europeiska tecken.
  • Unicode är den mest aktuella världstandarden med målet att inkludera alla världens skrivtecken.

Tillhörande quiz

Finnes här


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2016-08-15