Programmi Python su operazioni su stringhe

In questo tutorial, scriverai programmi Python per risolvere le domande frequenti sulle operazioni sulle stringhe.

Imparerai come verificare se le stringhe Python sono palindromi, anagrammi e sono nel titolo.

Stringhe Python: una rapida rassegna

In Python, le stringhe sono potenti tipi di dati integrati. Possono memorizzare una sequenza di caratteri.

Indicizzazione nelle stringhe Python: come tutti gli iterabili Python, anche le stringhe sono indicizzate a zero. Quindi gli indici validi per una stringa di lunghezza N sono 0, 1, 2 fino a N – 1.

Python supporta anche l’indicizzazione negativa per accedere agli elementi dalla fine della stringa. Quindi -1 è l’indice dell’ultimo carattere nella stringa, -2 è l’indice del penultimo carattere nella stringa e così via.

Immutabilità delle stringhe Python: inoltre, le stringhe in Python sono immutabili, quindi non è possibile modificarle sul posto. Tuttavia, puoi chiamare diversi metodi di stringa su di essi e ottenere copie di stringhe con il risultato desiderato.

Ora che abbiamo esaminato le basi delle stringhe Python, procediamo a risolvere alcuni problemi semplici ma interessanti.

Iniziamo.

Controlla se una stringa Python è un palindromo

Problema: data una stringa Python, controlla se è un palindromo o meno.

Se sì, restituisce True; altrimenti, restituisci Falso.

Quindi il nostro primo problema è verificare se una determinata stringa è o meno un palindromo.

Un palindromo è una stringa che legge lo stesso da sinistra a destra e da destra a sinistra. Elenchiamo alcuni esempi: racecar, refer, level, madam, radar e così via.

Ecco i passaggi per risolvere questo problema:

  • Ottenere una copia invertita della stringa e salvarla in un’altra variabile, se necessario.
  • Confronta i valori della stringa originale e della stringa invertita.
  • Se sono uguali, la stringa è un palindromo. Quindi ritorna Vero e fermati.
  • Se la copia originale e quella invertita non sono uguali, la stringa non è un palindromo. Quindi dovremmo restituire False.

L’operazione chiave consiste nell’ottenere una copia invertita della stringa. In Python, ci sono diversi modi per farlo.

Tuttavia, analizzeremo due approcci:

  • Usando il taglio delle stringhe
  • Usando la funzione reversed() e il metodo join()

Come invertire una stringa Python usando lo Slicing

La sintassi [start: stop: step] restituisce una fetta della stringa da start up a stop escluso, con step size step.

  • Se ometti start, la fetta inizia all’inizio della stringa.
  • Se non specifichi l’indice di arresto, la sezione si estende fino alla fine della stringa.
  • E i valori negativi di step possono essere usati per restituire fette a partire dalla fine della stringa.

Quindi [::-1] restituisce una copia invertita della stringa.

La cella di codice seguente contiene la definizione della funzione is_palindrome().

Accetta una stringa come argomento e restituisce True o False a seconda che sia o meno un palindromo.

Qui, abbiamo usato lo string slicing per ottenere una copia inversa della stringa.

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

▶️ Ora che abbiamo definito la funzione, possiamo andare avanti e chiamare con qualsiasi stringa valida come argomento.

is_palindrome("racecar")
True

Nella cella di codice sopra, racecar è un palindromo. Quindi la funzione is_palindrome() restituisce True come previsto.

Ora, prova a chiamare la funzione con qualsiasi stringa che non sia un palindromo, come river.

is_palindrome("river")
False

E come puoi vedere, restituisce False, che è corretto. ✅

Come invertire una stringa Python usando reversed() e join()

In Python, puoi usare il metodo join() insieme alla funzione reversed() per invertire una stringa.

  • La funzione reversed() restituisce un iteratore inverso attraverso i caratteri nella stringa.
  • Il metodo join() può quindi essere utilizzato per unire quei caratteri nell’ordine inverso.

Usando il metodo sopra, puoi riscrivere la funzione is_palindrome() come nella cella di codice qui sotto.

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

Puoi anche usare la funzione is_palindrome() all’interno della comprensione dell’elenco per raccogliere tutti i palindromi da un elenco più lungo di stringhe.

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

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

Ecco come funziona il codice sopra:

  • Attraversa str_list, chiama is_palindrome() su ogni stringa.
  • Se is_palindrome() restituisce True, aggiungere la stringa all’elenco dei palindromi.

Come puoi vedere nell’output sopra, palindromi è un elenco di tutte le stringhe palindromiche in str_list.

Controlla se due stringhe Python sono anagrammi

Un’altra domanda popolare che potresti incontrare nelle interviste è verificare se una coppia di stringhe str1 e str2 sono anagrammi o meno.

Due stringhe si dicono anagrammi se il conteggio dei caratteri nelle due stringhe è esattamente lo stesso. Ciò significa che puoi ottenere una delle stringhe permutando o riorganizzando i caratteri nell’altra stringa.

Esempi di anagrammi includono gusto-stato, vaso-salva, gomito-sotto e così via.

Come verificare la presenza di anagrammi utilizzando Counter Object in Python

Un modo semplice e intuitivo consiste nel calcolare il numero di occorrenze di ciascun carattere nelle due stringhe. E poi controlla se i conteggi sono uguali.

Questo può essere fatto molto più facilmente usando l’oggetto Counter dal modulo itertools. Il Contatore object restituisce un dizionario Python: con i caratteri come chiavi e i conteggi corrispondenti come valori.

Considera le stringhe “salva” e “vaso” come mostrato di seguito.

str1 = "save"
str2 = "vase"

Qui, c1 e c2 sono oggetti contatore contenenti rispettivamente il conteggio dei caratteri delle stringhe str1 e 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 restituisce True poiché str1 e str2 sono anagrammi.

Usando questa logica, possiamo ora andare avanti e definire la funzione are_anagrams() con due parametri word1 e word2. Nel corpo della funzione, controlliamo se Counter(word1) == Counter(word2).

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

▶️ Per verificare, chiama are_anagrams() con str1, str2 come argomenti. Poiché str1 e str2 sono anagrammi (“save” e “vase”), la funzione restituisce True, che è corretto.

are_anagrams(str1, str2)
True

Come verificare la presenza di anagrammi utilizzando copie ordinate di stringhe

C’è un altro modo per farlo.

Se due stringhe sono anagrammi, le loro copie ordinate sono uguali.

Quindi possiamo riscrivere la funzione are_anagrams() per verificare se la versione ordinata di str1 è la stessa della copia ordinata di str2. Se sono uguali, le due stringhe sono anagrammi; altrimenti, non lo sono.

Usando il metodo sopra per verificare l’uguaglianza delle copie ordinate, possiamo riscrivere la funzione are_anagrams() come segue.

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

Facciamo ora alcune chiamate di funzione.

  • Le stringhe “elbow” e “below” sono anagrammi e la funzione are_anagrams() restituisce True.
  • E “stato” e “assaggiato” non sono anagrammi e la funzione restituisce False.
are_anagrams("below","elbow")
True

are_anagrams("state","tasted")
False

Controlla se una stringa Python è in Title Case

Ecco la nostra ultima domanda per questo tutorial.

Problema: data una stringa: il nome di una persona, con nome e cognome.

Devi controllare se la prima lettera del nome e del cognome sono in maiuscolo.

Questo tipo di maiuscolo in cui la prima lettera di ogni parola è maiuscola è chiamato titolo.

Quindi devi controllare se il nome è nel titolo:

1. Se sì, emetti un messaggio che la formattazione è nel titolo.

2. Altrimenti, restituisci una copia della stringa formattata nel titolo

  • Python ha un metodo di stringa integrato istitle(), che controlla se una stringa è nel caso del titolo.

.istitle() restituisce True se la stringa è formattata nel titolo, altrimenti restituisce False.

  • E il metodo di stringa di Python title() restituisce una copia della stringa formattata nel caso del titolo.

Quindi ora puoi usare questi due metodi per risolvere il problema.

Definisci una funzione check_titlecase() che accetti name come argomento.

  • Puoi chiamare il metodo istitle() sulla stringa di input per verificare se è formattato nel titolo.
  • Se True, puoi stampare che la stringa è già nel titolo.
  • Altrimenti, puoi chiamare il metodo title() e restituire una copia della stringa nel caso del titolo.

La cella di codice seguente mostra la definizione della funzione check_titlecase().

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

Chiamiamo ora il metodo check_titlecase() con un argomento.

check_titlecase("jane smith")

# Output
Jane Smith

Nell’output sopra, puoi vedere che la stringa “Jane Smith” è ora nel titolo.

▶️ Facciamo un altro esempio.

check_titlecase("agatha Christie")

# Output
Agatha Christie

Questa volta, chiamiamo la funzione con una stringa con maiuscole e minuscole.

check_titlecase("Grace Hopper")

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

Riceviamo una notifica che la stringa è formattata nel titolo e la funzione funziona come previsto.

Conclusione 👩‍🏫

Ora riassumiamo i problemi che abbiamo discusso finora.

  • Per verificare se una stringa è palindromo, controlla se la stringa e la sua versione invertita sono uguali. È possibile utilizzare il taglio delle stringhe o metodi incorporati per invertire le stringhe.
  • Per verificare se due stringhe sono anagrammi, controlla se le loro copie ordinate sono uguali. E per ordinare una stringa, usa la funzione built-in sorted().
  • Per verificare se un nome è in maiuscolo del titolo, utilizzare il metodo .istitle() per il controllo e il metodo .title() per ottenere una copia della stringa con maiuscolo del titolo.

Spero che questo tutorial sulle stringhe Python ti sia piaciuto. Come passaggio successivo, impara come utilizzare le comprensioni degli elenchi in Python o scopri l’operatore non uguale in Python.

Buon apprendimento e programmazione!🎉