Ebben az oktatóanyagban Python programokat fog írni a karakterlánc-műveletekkel kapcsolatos gyakran ismételt kérdések megoldására.
Megtanulhatja, hogyan ellenőrizheti, hogy a Python-karakterláncok palindromok, anagrammák-e, és a cím kis- és nagybetűjében vannak-e.
Tartalomjegyzék
Python Strings: Gyors áttekintés
A Pythonban a karakterláncok erőteljes beépített adattípusok. Egy karaktersorozatot tárolhatnak.
Indexelés Python karakterláncokban: Mint minden Python iterable, a karakterláncok is nulla indexeléssel rendelkeznek. Tehát az N hosszúságú karakterlánc érvényes indexei 0, 1, 2 és N – 1.
A Python támogatja a negatív indexelést is az elemek eléréséhez a karakterlánc végéről. Tehát a -1 a karakterlánc utolsó karakterének indexe, a -2 a karakterlánc második karakterének indexe, és így tovább.
Python-karakterláncok megváltoztathatatlansága: Ezenkívül a Pythonban lévő karakterláncok megváltoztathatatlanok, így nem módosíthatók a helyükön. Mindazonáltal több karakterlánc-módszert is meghívhat rajtuk, és a kívánt eredménnyel másolatokat készíthet a karakterláncokról.
Most, hogy áttekintettük a Python karakterláncok alapjait, folytassuk néhány egyszerű, de érdekes probléma megoldását.
Kezdjük.
Ellenőrizze, hogy a Python karakterlánc palindrom-e
Probléma: Ha adott egy Python karakterlánc, ellenőrizze, hogy palindrom-e vagy sem.
Ha igen, adja vissza a True értéket; különben térjen vissza False.
Tehát az első problémánk annak ellenőrzése, hogy egy adott karakterlánc palindrom-e vagy sem.
A palindrom egy karakterlánc, amely ugyanazt olvassa balról jobbra és jobbról balra. Soroljunk fel néhány példát: versenyautó, referencia, szint, asszonyom, radar stb.
Íme a probléma megoldásának lépései:
- Szerezze be a karakterlánc fordított másolatát, és szükség esetén tárolja egy másik változóban.
- Hasonlítsa össze az eredeti és a fordított karakterlánc értékeit.
- Ha egyenlőek, a húr palindrom. Tehát térj vissza True-hoz, és állj meg.
- Ha az eredeti és a fordított másolat nem egyenlő, a karakterlánc nem palindrom. Tehát vissza kell adnunk a False-t.
A legfontosabb művelet a karakterlánc fordított másolatának beszerzése. A Pythonban ezt többféleképpen is megteheti.
Két megközelítést fogunk azonban áttekinteni:
- Szúrószeletelés használata
- A fordított() függvény és a join() metódus használata
Python karakterlánc visszafordítása szeletelés segítségével
Az
- Ha kihagyja az indítást, a szelet a karakterlánc elején kezdődik.
- Ha nem adja meg a stop indexet, a szelet a karakterlánc végéig terjed.
- A step negatív értékei pedig felhasználhatók a szeletek visszaadására a karakterlánc végétől kezdve.
Tehát [::-1] a karakterlánc fordított másolatát adja vissza.
A következő kódcella az is_palindrom() függvény definícióját tartalmazza.
Egy karakterláncot vesz fel argumentumként, és igaz vagy hamis értéket ad vissza attól függően, hogy palindrom-e vagy sem.
Itt karakterláncszeletelést alkalmaztunk, hogy megkapjuk a karakterlánc fordított másolatát.
def is_palindrome(this_str): rev_str = this_str[::-1] if (this_str == rev_str): return True else: return False
▶️ Most, hogy definiáltuk a függvényt, továbbléphetünk, és meghívhatunk bármilyen érvényes karakterláncot argumentumként.
is_palindrome("racecar") True
A fenti kódcellában a versenyautó egy palindrom. Tehát az is_palindrom() függvény a várt módon True értéket ad vissza.
Most próbálja meg meghívni a függvényt bármilyen karakterlánccal, amely nem palindrom, például river.
is_palindrome("river") False
És amint látja, False-t ad vissza, ami helyes. ✅
Python karakterlánc visszafordítása a reverse() és a join() használatával
A Pythonban a join() metódust és a reversed() függvényt használhatja a karakterlánc megfordításához.
- A fordított() függvény egy fordított iterátort ad vissza a karakterlánc karakterein keresztül.
- A join() metódus ezután a karakterek fordított sorrendben történő összekapcsolására használható.
A fenti módszerrel átírhatja az is_palindrome() függvényt, mint az alábbi kódcellában.
def is_palindrome(this_str): rev_str="".join(reversed(this_str)) if (this_str == rev_str): return True else: return False
Használhatja az is_palindrom() függvényt is a listaértésen belül, hogy az összes palindromot összegyűjtse egy hosszabb karakterlánclistából.
str_list = ["refer","blue","level","12321","dragon"] palindromes = [string for string in str_list if is_palindrome(string)] print(palindromes) # Output ['refer', 'level', '12321']
Így működik a fenti kód:
- Haladjon át az str_list-en, és hívja meg az is_palindrome()-t minden karakterláncon.
- Ha az is_palindrom() igaz értéket ad vissza, adja hozzá a karakterláncot a palindromok listájához.
Amint a fenti kimenetben látható, a palindromes az összes palindrom karakterlánc listája az str_listban.
Ellenőrizze, hogy két Python karakterlánc anagramm-e
Egy másik népszerű kérdés, amellyel az interjúk során találkozhat, annak ellenőrzése, hogy az str1 és str2 karakterláncok anagrammák-e vagy sem.
Két karakterláncot anagrammának nevezünk, ha a karakterek száma a két karakterláncban pontosan megegyezik. Ez azt jelenti, hogy az egyik karakterláncot a másik karakterlánc karaktereinek permutálásával vagy átrendezésével szerezheti meg.
Az anagrammák példái közé tartozik az állapotíz, a mentési váza, a könyök alatt és így tovább.
Anagrammák ellenőrzése a Python számlálóobjektumával
Egy egyszerű és intuitív módszer az egyes karakterek előfordulási számának kiszámítása a két karakterláncban. Ezután ellenőrizze, hogy a számok egyenlőek-e.
Ez még könnyebben megtehető az itertools modul Counter objektumával. Az Számláló Az objektum egy Python szótárt ad vissza: a karakterekkel kulcsként, és a megfelelő értékekkel.
Tekintsük a „mentés” és a „váza” húrokat az alábbiak szerint.
str1 = "save" str2 = "vase"
Itt a c1 és c2 számláló objektumok, amelyek az str1 és str2 karakterláncok számát tartalmazzák.
from collections import Counter c1 = Counter(str1) c2 = Counter(str2) print(c1) print(c2) c1 == c2 # Output Counter({'s': 1, 'a': 1, 'v': 1, 'e': 1}) Counter({'v': 1, 'a': 1, 's': 1, 'e': 1}) True
c1 == c2 igazat ad vissza, mivel az str1 és str2 anagrammák.
Ezzel a logikával most továbbléphetünk, és meghatározhatjuk az are_anagrams() függvényt két paraméterrel, szó1 és szó2. A függvénytörzsben ellenőrizzük, hogy a Számláló(szó1) == Számláló(szó2).
def are_anagrams(word1, word2): if Counter(word1) == Counter(word2): return True else: return False
▶️ Az ellenőrzéshez hívja meg az are_anagrams() függvényt str1, str2 argumentumokkal. Mivel az str1 és str2 anagrammák („mentés” és „váza”), a függvény True-t ad vissza, ami helyes.
are_anagrams(str1, str2) True
Anagrammák ellenőrzése karakterláncok rendezett másolataival
Ezt más módon is megteheti.
Ha két karakterlánc anagramma, akkor a rendezett másolataik egyenlőek.
Így átírhatjuk az are_anagrams() függvényt, hogy ellenőrizzük, hogy az str1 rendezett változata megegyezik-e az str2 rendezett példányával. Ha egyenlőek, akkor a két karakterlánc anagramma; egyébként nem azok.
A fenti módszerrel a rendezett másolatok egyenlőségének ellenőrzésére az are_anagrams() függvényt a következőképpen írhatjuk át.
def are_anagrams(word1, word2): if sorted(word1) == sorted(word2): return True else: return False
Most hajtsunk végre néhány függvényhívást.
- Az „elbow” és „below” karakterláncok anagrammák, az are_anagrams() függvény pedig True értéket ad vissza.
- És az „állapot” és a „kóstolt” nem anagrammák, és a függvény False-t ad vissza.
are_anagrams("below","elbow") True are_anagrams("state","tasted") False
Ellenőrizze, hogy a Python-karakterlánc nagybetűben van-e
Íme az utolsó kérdésünk ehhez az oktatóanyaghoz.
Probléma: Adott egy karakterlánc: egy személy neve – kereszt- és vezetéknévvel.
Ellenőriznie kell, hogy a kereszt- és a vezetéknév első betűje nagybetűs-e.
Az ilyen típusú kis- és nagybetűket, ahol minden szó első betűje nagybetűs, a cím kis- és nagybetűje.
Tehát ellenőrizze, hogy a név nagybetűs-e:
1. Ha igen, adjon ki egy üzenetet arról, hogy a formázás nagybetűs.
2. Ellenkező esetben küldje vissza a karakterlánc másolatát a cím kis- és nagybetűjében
- A Python rendelkezik egy beépített string metódussal istitle(), amely ellenőrzi, hogy a karakterlánc a cím kis- és nagybetűjében van-e.
A
- És a Python string metódusa title() visszaadja a karakterlánc másolatát a cím kis- és nagybetűjében.
Tehát most ezt a két módszert használhatja a probléma megoldására.
Határozzon meg egy check_titlecase() függvényt, amely elfogadja a nevet argumentumként.
- Meghívhatja az istitle() metódust a bemeneti karakterláncon, hogy ellenőrizze, hogy a cím kis- és nagybetűre van-e formázva.
- Ha igaz, akkor kinyomtathatja, hogy a karakterlánc már kis- és nagybetűben van.
- Egyébként meghívhatja a title() metódust, és visszaadhatja a karakterlánc másolatát a cím kis- és nagybetűjében.
A következő kódcella a check_titlecase() függvény definícióját mutatja.
def check_titlecase(name): if name.istitle(): print(f"'{name}' is already formatted in title case.") else: return name.title()
Most hívjuk meg a check_titlecase() metódust argumentummal.
check_titlecase("jane smith") # Output Jane Smith
A fenti kimenetben láthatja, hogy a „Jane Smith” karakterlánc most a cím kis- és nagybetűjében van.
▶️ Vegyünk egy másik példát.
check_titlecase("agatha Christie") # Output Agatha Christie
Ezúttal hívjuk meg a függvényt egy kis- és nagybetűs karakterlánccal.
check_titlecase("Grace Hopper") # Output 'Grace Hopper' is already formatted in title case.
Értesítést kapunk arról, hogy a karakterlánc a cím kis- és nagybetűjében van formázva, és a függvény a várt módon működik.
Következtetés 👩🏫
Most pedig foglaljuk össze az eddig tárgyalt problémákat.
- Annak ellenőrzéséhez, hogy egy karakterlánc palindrom-e, ellenőrizze, hogy a karakterlánc és a fordított változata egyenlő-e. A karakterláncok megfordításához karakterláncszeletelést vagy beépített módszereket használhat.
- Annak ellenőrzéséhez, hogy két karakterlánc anagramma-e, ellenőrizze, hogy a rendezett példányaik egyenlőek-e. Egy karakterlánc rendezéséhez pedig használja a beépített sorted() függvényt.
- Annak ellenőrzésére, hogy a név kis- és nagybetűs-e, használja az .istitle() metódust az ellenőrzéshez, a .title() metódust pedig a karakterlánc cím-nagybetűs másolatának beszerzéséhez.
Remélem, tetszett ez a Python-sztringekkel kapcsolatos oktatóanyag. Következő lépésként tanulja meg a listaértelmezések használatát Pythonban, vagy ismerje meg a Python nem egyenlő operátorát.
Jó tanulást és kódolást!🎉