Python programok a karakterlánc-műveleteken

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.

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 szintaxis[start: stop: step] visszaadja az karakterlánc egy szeletét az elejétől a stopig, de nem tartalmazza a leállítást, lépésenkénti lépéssel.

  • 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.
  A Volume+ zenevezérlőket és egyebeket ad a hangerő HUD-hoz [Jailbreak]

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.

  A LightningBug GTK téma telepítése Linuxon

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.

  Az összes iMessage törlése Macről vagy MacBookról

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 .istitle() igaz értéket ad vissza, ha az karakterlánc a cím kis- és nagybetűjében van formázva, ellenkező esetben False értéket ad vissza.

  • É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!🎉