Programe Python pe operațiuni cu șiruri

În acest tutorial, veți scrie programe Python pentru a rezolva întrebările frecvente despre operațiunile cu șir.

Veți învăța cum să verificați dacă șirurile Python sunt palindrome, anagrame și sunt în cazul titlului.

Python Strings: o revizuire rapidă

În Python, șirurile de caractere sunt tipuri puternice de date încorporate. Ele pot stoca o secvență de caractere.

Indexarea în șiruri Python: La fel ca toate iterabilele Python, șirurile sunt, de asemenea, indexate la zero. Deci indicii validi pentru un șir de lungime N sunt de la 0, 1, 2 până la N – 1.

Python acceptă, de asemenea, indexarea negativă pentru a accesa elemente de la sfârșitul șirului. Deci -1 este indexul ultimului caracter din șir, -2 este indexul pen-ultimului caracter din șir și așa mai departe.

Imutabilitatea șirurilor Python: În plus, șirurile din Python sunt imuabile, așa că nu le puteți modifica în loc. Cu toate acestea, puteți apela mai multe metode de șir pe ele și puteți obține copii ale șirurilor cu rezultatul dorit.

Acum că am trecut în revistă elementele de bază ale șirurilor Python, să trecem la rezolvarea unor probleme simple, dar interesante.

Să începem.

Verificați dacă un șir Python este un Palindrom

Problemă: Având în vedere un șir Python, verificați dacă este sau nu un palindrom.

Dacă da, returnați True; altfel, returnează False.

Deci prima noastră problemă este să verificăm dacă un șir dat este sau nu un palindrom.

Un palindrom este un șir care citește la fel de la stânga la dreapta, precum și de la dreapta la stânga. Să enumeram câteva exemple: mașină de curse, referință, nivel, doamnă, radar și așa mai departe.

Iată pașii pentru a rezolva această problemă:

  • Obțineți o copie inversată a șirului și stocați-o într-o altă variabilă, dacă este necesar.
  • Comparați valorile șirului original și ale șirului inversat.
  • Dacă sunt egale, șirul este un palindrom. Așa că întoarce-te pe Adevărat și oprește-te.
  • Dacă originalul și copiile inversate nu sunt egale, șirul nu este un palindrom. Deci ar trebui să returnăm False.
  Cum să joci jocuri Pokémon pe iPhone sau iPad

Operația cheie este de a obține o copie inversată a șirului. În Python, există câteva moduri diferite în care puteți face acest lucru.

Cu toate acestea, vom trece peste două abordări:

  • Folosind string slicing
  • Folosind funcția inversă() și metoda join().

Cum să inversați un șir Python folosind Slicing

Sintaxa [start: stop: step] returnează o porțiune din șirul de la început până la, dar fără a include oprirea, cu pas de dimensiunea pasului.

  • Dacă omiteți startul, felia începe la începutul șirului.
  • Dacă nu specificați indexul de oprire, felia se extinde până la sfârșitul șirului.
  • Și valorile negative ale pasului pot fi folosite pentru a returna felii începând de la sfârșitul șirului.

Deci [::-1] returnează o copie inversată a șirului.

Următoarea celulă de cod conține definiția funcției is_palindrome().

Ia un șir ca argument și returnează True sau False, în funcție de faptul că este sau nu un palindrom.

Aici, am folosit string slicing pentru a obține o copie inversă a șirului.

def is_palindrome(this_str):
  rev_str = this_str[::-1]
  if (this_str == rev_str):
    return True
  else:
    return False

▶️ Acum că am definit funcția, putem merge mai departe și apelăm cu orice șir valid ca argument.

is_palindrome("racecar")
True

În celula codului de mai sus, mașina de curse este un palindrom. Deci, funcția is_palindrome() returnează True așa cum era de așteptat.

Acum, încercați să apelați funcția cu orice șir care nu este un palindrom, cum ar fi river.

is_palindrome("river")
False

Și după cum puteți vedea, returnează False, ceea ce este corect. ✅

Cum să inversați un șir Python folosind reversed() și join()

În Python, puteți folosi metoda join() împreună cu funcția reversed() pentru a inversa un șir.

  • Funcția reversed() returnează un iterator invers prin caracterele din șir.
  • Metoda join() poate fi apoi folosită pentru a uni acele caractere în ordine inversă.

Folosind metoda de mai sus, puteți rescrie funcția is_palindrome() ca în celula de cod de mai jos.

def is_palindrome(this_str):
  rev_str="".join(reversed(this_str))
  if (this_str == rev_str):
    return True
  else:
    return False

De asemenea, puteți utiliza funcția is_palindrome() din interiorul listei de înțelegere pentru a colecta toate palindromurile dintr-o listă mai lungă de șiruri.

str_list = ["refer","blue","level","12321","dragon"]

palindromes = [string for string in str_list if is_palindrome(string)]
print(palindromes)
# Output
['refer', 'level', '12321']

Iată cum funcționează codul de mai sus:

  • Parcurgeți str_list, apelați is_palindrome() pe fiecare șir.
  • Dacă is_palindrome() returnează True, adăugați șirul la lista de palindromuri.
  Cum să înregistrați o întâlnire Zoom

După cum puteți vedea în rezultatul de mai sus, palindromes este o listă a tuturor șirurilor palindromice din str_list.

Verificați dacă Două șiruri Python sunt anagrame

O altă întrebare populară pe care o puteți întâlni în interviuri este să verificați dacă o pereche de șiruri str1 și str2 sunt sau nu anagrame.

Se spune că două șiruri sunt anagrame dacă numărul caracterelor din cele două șiruri este exact același. Aceasta înseamnă că puteți obține unul dintre șiruri prin permutarea sau rearanjarea caracterelor din celălalt șir.

Exemplele de anagrame includ stare-gust, salvare-vază, cot-dedesubt și așa mai departe.

Cum să verificați anagramele folosind Counter Object în Python

O modalitate simplă și intuitivă este de a calcula numărul de apariții ale fiecărui caracter din cele două șiruri. Și apoi verificați dacă numărările sunt egale.

Acest lucru se poate face cu atât mai ușor folosind obiectul Counter din modulul itertools. The Tejghea object returnează un dicționar Python: cu caracterele ca taste și contorizarea corespunzătoare ca valori.

Luați în considerare șirurile „salvare” și „vază”, așa cum se arată mai jos.

str1 = "save"
str2 = "vase"

Aici, c1 și c2 sunt obiecte contor care conțin numărul de caractere ale șirurilor str1 și, respectiv, str2.

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 returnează adevărat deoarece str1 și str2 sunt anagrame.

Folosind această logică, putem merge mai departe și definim funcția are_anagrams() cu doi parametri cuvânt1 și cuvânt2. În corpul funcției, verificăm dacă Counter(word1) == Counter(word2).

def are_anagrams(word1, word2):
  if Counter(word1) ==  Counter(word2):
    return True
  else:
    return False

▶️ Pentru a verifica, apelați are_anagrams() cu str1, str2 ca argumente. Deoarece str1 și str2 sunt anagrame („salvare” și „vază”), funcția returnează True, ceea ce este corect.

are_anagrams(str1, str2)
True

Cum să verificați anagramele folosind copii sortate ale șirurilor

Există un alt mod în care poți face asta.

Dacă două șiruri sunt anagrame, atunci copiile lor sortate sunt egale.

Deci putem rescrie funcția are_anagrams() pentru a verifica dacă versiunea sortată a lui str1 este aceeași cu copia sortată a lui str2. Dacă sunt egale, atunci cele două șiruri sunt anagrame; altfel, nu sunt.

Folosind metoda de mai sus pentru a verifica egalitatea copiilor sortate, putem rescrie funcția are_anagrams() după cum urmează.

def are_anagrams(word1, word2):
  if sorted(word1) ==  sorted(word2):
    return True
  else:
    return False

Să facem acum câteva apeluri de funcții.

  • Șirurile „cot” și „dedesubt” sunt anagrame, iar funcția are_anagrams() returnează True.
  • Iar „state” și „gusted” nu sunt anagrame, iar funcția returnează False.
are_anagrams("below","elbow")
True

are_anagrams("state","tasted")
False

Verificați dacă un șir Python este în Titlu Case

Iată întrebarea noastră finală pentru acest tutorial.

  Aplicație web vs site web

Problemă: dat un șir: numele unei persoane — cu prenume și prenume.

Trebuie să verificați dacă prima literă atât a numelui, cât și a prenumelui este scrisă cu majuscule.

Acest tip de majuscule în care prima literă a fiecărui cuvânt este scrisă cu majuscule se numește majusculă.

Deci, trebuie să verificați dacă numele este în majusculele titlului:

1. Dacă da, afișați un mesaj că formatarea este în majuscule.

2. În caz contrar, returnați o copie a șirului formatat în cazul titlului

  • Python are o metodă de șir încorporată istitle(), care verifică dacă un șir este în cazul titlului.

.istitle() returnează True dacă șirul este formatat în cazul titlului, altfel returnează False.

  • Și metoda șirurilor de caractere Python title() returnează o copie a șirului formatat în cazul titlului.

Deci acum puteți folosi aceste două metode pentru a rezolva problema.

Definiți o funcție check_titlecase() care acceptă nume ca argument.

  • Puteți apela metoda istitle() pe șirul de intrare pentru a verifica dacă este formatat în majuscule de titlu.
  • Dacă este adevărat, puteți imprima că șirul este deja în majusculele titlului.
  • În caz contrar, puteți apela metoda title() și puteți returna o copie a șirului în cazul titlului.

Următoarea celulă de cod arată definiția funcției check_titlecase().

def check_titlecase(name):
  if name.istitle():
    print(f"'{name}' is already formatted in title case.")
  else:
    return name.title()

Să apelăm acum metoda check_titlecase() cu un argument.

check_titlecase("jane smith")

# Output
Jane Smith

În rezultatul de mai sus, puteți vedea că șirul „Jane Smith” este acum în cazul titlului.

▶️ Să luăm un alt exemplu.

check_titlecase("agatha Christie")

# Output
Agatha Christie

De data aceasta, să apelăm funcția cu un șir cu majuscule și minuscule.

check_titlecase("Grace Hopper")

# Output
'Grace Hopper' is already formatted in title case.

Suntem notificați că șirul este formatat în cazul titlului, iar funcția funcționează conform așteptărilor.

Concluzie 👩‍🏫

Acum să rezumăm problemele pe care le-am discutat până acum.

  • Pentru a verifica dacă un șir este un palindrom, verificați dacă șirul și versiunea sa inversată sunt egale. Puteți utiliza tăierea șirurilor sau metodele încorporate pentru a inversa șirurile.
  • Pentru a verifica dacă două șiruri sunt anagrame, verificați dacă copiile lor sortate sunt egale. Și pentru a sorta un șir, utilizați funcția încorporată sorted().
  • Pentru a verifica dacă un nume este în majusculele titlului, utilizați metoda .istitle() pentru verificare și metoda .title() pentru a obține o copie a șirului cu majuscule și minuscule.

Sper că v-a plăcut acest tutorial despre șirurile Python. Ca pas următor, aflați cum să utilizați listele de înțelegere în Python sau aflați despre operatorul neegal din Python.

Învățare și codare fericită!🎉