Szerkesztés alatt!
Az oldal további része szerkesztés alatt áll, a tartalma minden további értesítés nélkül többször, gyakran, jelentősen megváltozhat!
Sztringek, sztringbejárás
Tartalom
A Python str adattípusa, indexek, szeletek. A for utasítás, sztring bejárása for segítségével. Feladatmegoldások sztringek és sztringbejárás segítségével.
Az str típus alapjai
Mi az a sztring?
A sztring (string, rövidítve: str) karakterek sorozata. Bármilyen szöveget tartalmazhat: betűket, számokat, szóközöket, írásjeleket. Pythonban a sztringeket idézőjelek között adjuk meg.
Kétféle idézőjel használható:
| # Egyszeres idézőjel
nev = 'Anna'
varos = 'Budapest'
# Dupla idézőjel
uzenet = "Helló Világ!"
mondat = "Ez is egy sztring."
|
Mindkettő egyenértékű! A kettő közötti választás gyakran attól függ, hogy milyen karaktereket szeretnénk a sztringben használni:
| # Ha aposztróf van a szövegben, dupla idézőjelet használunk
mondat1 = "Becs'szóra ez Anna könyve!"
# Ha idézőjel van a szövegben, egyszeres idézőjelet használunk
mondat2 = 'Azt mondta: "Helló!"'
|
Sztringek összefűzése és ismétlése
| # Összefűzés (konkatenáció) + operátorral
keresztnev = "Anna"
vezeteknev = "Kovács"
teljes_nev = vezeteknev + " " + keresztnev
print(teljes_nev) # "Kovács Anna"
# Ismétlés * operátorral
print("ha" * 3) # "hahaha"
print("-" * 20) # "--------------------"
|
Indexelés sztringen
Az indexelés lehetővé teszi, hogy egy sztring egyetlen karakterét közvetlenül elérjük, anélkül hogy végigmennénk az összes karakteren.
Alapfogalmak:
- A karakterek 0-tól kezdődnek számozódni (nem 1-től!)
- Az utolsó karakter indexe:
len(sztring) - 1
- Használhatunk negatív indexeket is, amelyek a végéről számolnak
Pozitív indexelés
| szoveg = "Python"
print(szoveg[0]) # "P" - első karakter
print(szoveg[1]) # "y" - második karakter
print(szoveg[2]) # "t" - harmadik karakter
print(szoveg[3]) # "h"
print(szoveg[4]) # "o"
print(szoveg[5]) # "n" - utolsó karakter
# print(szoveg[6]) # HIBA! Nincs ilyen index
|
Indexelés
| Sztring: P y t h o n
Index: 0 1 2 3 4 5
|
A sztring hossza 6, de az utolsó index 5!
Negatív indexelés
A negatív indexek a sztring végéről számolnak visszafelé. Ez nagyon hasznos, amikor az utolsó karaktereket szeretnénk elérni.
| szoveg = "Python"
print(szoveg[-1]) # "n" - utolsó karakter
print(szoveg[-2]) # "o" - utolsó előtti
print(szoveg[-3]) # "h"
print(szoveg[-4]) # "t"
print(szoveg[-5]) # "y"
print(szoveg[-6]) # "P" - első karakter
|
Indexelés
| Sztring: P y t h o n
Pozitív: 0 1 2 3 4 5
Negatív: -6 -5 -4 -3 -2 -1
|
Miért hasznos a negatív index?
Sokszor nem tudjuk előre, hogy egy sztring milyen hosszú. Az utolsó karakter mindig [-1], függetlenül a hossztól!
| nev1 = "Anna"
nev2 = "Borbála"
print(nev1[-1]) # "a"
print(nev2[-1]) # "a"
# Pozitív indexszel:
print(nev1[3]) # "a"
print(nev2[6]) # "a" - de ezt előre tudnunk kellene!
|
Megváltozhatatlanság
A sztringek megváltozhatatlanok (immutable) Pythonban. Ez azt jelenti, hogy ha egyszer létrehoztunk egy sztringet, az eredeti értékét nem tudjuk módosítani. Új sztringet kell létrehozni helyette.
| szoveg = "hello"
# szoveg[0] = "H" # Ez HIBÁT okoz!
# Helyette új sztringet kell létrehozni:
szoveg = "Hello" # Ez működik
|
Sztring slice (szeletelés)
A slice segítségével egy sztring egy részét kaphatjuk meg. Nem csak egy karaktert, hanem egy részsztringet (substring).
A részsztring valójában nem az eredeti sztring egy része.
A részsztring technikailag egy új sztring lesz, amelynek az értéke megegyezik a meghatározott részsztring értékével, és nem az eredeti sztring egy tényleges részét kapjuk vissza; bár a Python sztringeknél ezzel nem kell foglalkoznunk.
- start: Melyik indextől kezdjük (ez a karakter benne lesz az eredményben)?
Elhagyható, alapértelmezése 0 (a sztring legelejétől indulunk).
- stop: Melyik index előtt állunk meg (ez a karakter nem lesz benne az eredményben)?
Elhagyható, alapértelmezése a sztring hossza (a szting legvégéig megyünk).
- step: Mekkora lépésközzel haladunk (minden hányadik karaktert szeretnénk az eredményben látni)?
Elhagyható, alapértelmezése 1 (a megadott index-intervallum minden karakterét).
1
2
3
4
5
6
7
8
9
10
11
12
13 | szoveg = "Programozás"
# Első 7 karakter (0-tól 7-ig, de 7 nincs benne)
print(szoveg[0:7]) # "Program"
# Ha 0-tól kezdjük, a 0 elhagyható
print(szoveg[:7]) # "Program"
# 7. indextől a végéig
print(szoveg[7:]) # "ozás"
# A teljes sztring
print(szoveg[:]) # "Programozás"
|
Részletes magyarázat - hogyan működik a stop?
A stop index karakter nincs benne az eredményben!
| szoveg = "Python"
# 012345 indexek
print(szoveg[0:3]) # "Pyt"
# Magyarázat: 0,1,2 indexű karakterek (0,1,2) - a 3-as nincs benne!
print(szoveg[2:5]) # "tho"
# Magyarázat: 2,3,4 indexű karakterek - az 5-ös nincs benne!
|
Sztring részek kivágása
[start:stop] jelentése: "start-tól egészen stop előttig
| szoveg = "Programozás"
# 01234567890 indexek
# 2. indextől az 5. indexig (5 nincs benne)
print(szoveg[2:5]) # "ogr"
# 3. indextől a 8. indexig
print(szoveg[3:8]) # "gramo"
# 1. indextől a 10. indexig
print(szoveg[1:10]) # "rogramoz"
|
Negatív indexekkel
A szeletelésnél a start és stop indexek megadására negatív indexek is használhatók, akár pozitív indexekkel kombinálva is.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | szoveg = "Programozás"
# Utolsó 4 karakter
print(szoveg[-4:]) # "ozás"
# Első karakterektől az utolsó 4 előttig
print(szoveg[:-4]) # "Program"
# -8-tól -2-ig
print(szoveg[-8:-2]) # "gramoz"
# -8-tól 8-ig
print(szoveg[-8:-2]) # "gram"
# 4-től -4-ig
print(szoveg[4:-4]) # "ram"
|
Step (lépésköz) használata
A lépésköz megadja, hogy az adott intervallumból minden hányadik karakter szerepeljen az eredményben.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | szoveg = "Programozás"
# Minden karakter (lépésköz 1 - ez az alapértelmezett)
print(szoveg[::1]) # "Programozás"
# Minden második karakter
print(szoveg[::2]) # "Pormzs"
# Minden harmadik karakter
print(szoveg[::3]) # "Pgms"
# Csak a páros indexű karakterek
print(szoveg[0::2]) # "Pormzs"
# Csak a páratlan indexű karakterek
print(szoveg[1::2]) # "rgazá"
|
Sztring megfordítása
A -1-es step visszafelé halad, így megfordítja a sztringet!
| szoveg = "Python"
# Sztring visszafelé
print(szoveg[::-1]) # "nohtyP"
# Gyakorlati példa: palindrom ellenőrzés
szo = "görög"
if szo == szo[::-1]:
print("Ez egy palindrom!")
|
Példák
1
2
3
4
5
6
7
8
9
10
11
12
13 | szoveg = "Programozás"
# Első 7 karakter, minden másodikat
print(szoveg[:7:2]) # "Porm"
# 2-től 9-ig, minden harmadik
print(szoveg[2:9:3]) # "omo"
# Hátrafelé, az utolsó 6 karakterből
print(szoveg[-6::-1]) # "margorp"
# Hátrafelé, kettesével
print(szoveg[::-2]) # "szmroP"
|
Gyakori hibák és trükkök
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | szoveg = "hello"
# Ha a stop nagyobb, mint a hossz, nem kapunk hibát!
print(szoveg[0:100]) # "hello" - nem hibás!
# Ha a start nagyobb, mint a stop (és a step pozitív), üres sztringet kapunk
print(szoveg[4:2]) # "" (üres)
# A start és stop indexek abszolut pozíciója számít
print(szoveg[-2:2]) # "" (üres)
# Ha a start nagyobb, mint a sztring hossza, üres sztringet kapunk
print(szoveg[10:20]) # "" (üres)
# Negatív step negatív tartománnyal
print(szoveg[4:1:-1]) # "oll" (visszafelé 4-től 1-ig, de 1 nincs benne)
|
For ciklus sztringen
A for segítségével végig tudunk menni egy sztring minden karakterén.
Ez az iteráció legegyszerűbb formája.
Alapvető szintaxis
| for valtozo in sztring:
# a válozó minden körben egy következő karaktert kap
# végezz műveleteket a karakterrel
|
Példa
| nev = "Anna"
for betu in nev:
print(betu)
|
Kimenet
Mi történik lépésről lépésre?
- Az első körben
betu értéke "A" lesz
- Kiírja: A
- A második körben
betu értéke "n" lesz
- Kiírja: n
- A harmadik körben
betu értéke "n" lesz
- Kiírja: n
- A negyedik körben
betu értéke "a" lesz
- Kiírja: a
- Nincs több karakter, a ciklus véget ér
Számolás for ciklussal
| szoveg = "Hello World"
maganhangzok = 0
for betu in szoveg:
if betu.lower() in "aeiou": # angol magánhangzók
maganhangzok += 1
print(f"Magánhangzók száma: {maganhangzok}") # 3
|
Magyarázat
- Végigmegyünk minden karakteren
- Kisbetűssé alakítjuk (hogy pl. az 'A' is 'a' betűnek számítson)
- Megnézzük, hogy magánhangzó-e (elegendő a kisbetűkre koncentrálni)
- Ha igen, növeljük a számlálót
Sztring metódusok
A metódusok olyan függvények, amelyek egy objektumhoz tartoznak.
A sztring metódusokat pont (.) után írjuk a sztring után.
A sztringek metódusai nem változtatják meg az eredeti sztringet, hanem egy új sztringet adnak vissza!
Általános szintaxis sztring_valtozo.metodus_neve()
Kis- és nagybetűs átalakítások
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | szoveg = "hello Világ"
# CSUPA NAGYBETŰ
print(szoveg.upper()) # "HELLO VILÁG"
# csupa kisbetű
print(szoveg.lower()) # "hello világ"
# Első betű nagybetűs, többi kisbetű
print(szoveg.capitalize()) # "Hello világ"
# Minden Szó Első Betűje Nagybetűs
print(szoveg.title()) # "Hello Világ"
# FONTOS: az eredeti sztring nem változik!
print(szoveg) # még mindig "hello Világ"
|
Gyakorlati példa
| nev = input("Add meg a neved: ")
# A felhasználó bármilyen formában írhatja be (ANNA, anna, AnNa)
helyes_nev = nev.capitalize()
print(f"Üdvözöllek, {helyes_nev}!")
|
Szóközök eltávolítása
| szoveg = " hello világ "
# Mindkét oldalról eltávolítja a kezdő és befejező szóközöket
print(szoveg.strip()) # "hello világ"
# Csak balról távolítja el
print(szoveg.lstrip()) # "hello világ "
# Csak jobbról távolítja el
print(szoveg.rstrip()) # " hello világ"
|
Miért hasznos a strip()?
Amikor a felhasználó begépel valamit, gyakran véletlenül szóközöket üt előtte vagy utána.
A strip() ezeket eltávolítja.
| jelszo = input("Jelszó: ")
jelszo_tiszta = jelszo.strip() # Eltávolítja a felesleges szóközöket, de
# funkcionálisan hibás, ha a szóköz elején
# és/vagy végén szándékosan ténylegesen
# szóközt használunk.
|
Keresés és számolás
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | mondat = "A Python programozási nyelv nagyszerű. Python mindenhol."
# Hányszor szerepel egy részsztring?
print(mondat.count("Python")) # 2
print(mondat.count("programozási")) # 1
print(mondat.count("Java")) # 0
# Szerepel-e benne? (in operátor - nem metódus, de hasznos)
print("Python" in mondat) # True
print("Java" in mondat) # False
# Hol van először? (milyen indextől kezdődik)
print(mondat.find("Python")) # 2
print(mondat.find("Java")) # -1 (ha nincs benne)
|
Csere (replace)
| szoveg = "A macska az ágyon ül."
# Minden "macska" szót kicserél "kutya"-ra
uj_szoveg = szoveg.replace("macska", "kutya")
print(uj_szoveg) # "A kutya az ágyon ül."
# Az eredeti sztring értéke nem változik!
print(szoveg) # "A macska az ágyon ül."
|
Több csere egyszerre
| szoveg = "hello hello hello"
uj = szoveg.replace("hello", "szia")
print(uj) # "szia szia szia"
|
len() függvény - sztring hossza
A len() nem metódus, hanem beépített függvény.
Visszaadja, hány karakter van a sztringben.
| szoveg = "Python"
print(len(szoveg)) # 6
ures = ""
print(len(ures)) # 0
hosszu = "Ez egy hosszabb mondat."
print(len(hosszu)) # 23 (szóközök és írásjelek is számítanak, azok is karakterek!)
|