Il confronto di stringhe in Python è un compito frequente durante la pro­gram­ma­zio­ne e può essere uti­liz­za­to per in­ter­pre­ta­re gli input utente, ve­ri­fi­ca­re una grande quantità di dati o elaborare pro­to­col­li di testo. Ti pre­sen­tia­mo numerose modalità per comparare stringhe in Python e ti forniamo esempi di facile com­pren­sio­ne.

Con­fron­ta­re stringhe in Python: operatori e funzioni

Python mette a di­spo­si­zio­ne dei suoi utenti una vasta gamma di operatori e funzioni pre­de­fi­ni­te per sem­pli­fi­ca­re e ot­ti­miz­za­re il confronto tra stringhe. Di seguito ti pre­sen­tia­mo gli operatori di confronto per poi procedere a il­lu­stra­re i vari metodi di confronto. Inoltre, in fondo all’articolo abbiamo inserito due esempi di codice che mostrano come uti­liz­za­re sia gli operatori che i metodi.

Operatori di confronto

Il modo più semplice per comparare due stringhe in Python è usare gli operatori Python. Ana­lo­ga­men­te a quanto avviene con i numeri interi o in virgola mobile, è possibile uti­liz­za­re gli operatori di confronto per ve­ri­fi­ca­re l’ugua­glian­za tra le stringhe. Tuttavia, in questo caso gli operatori non operano come farebbero con i numeri, in quanto le stringhe pos­sie­do­no numerose ca­rat­te­ri­sti­che che è possibile mettere a confronto. Nella tabella qui sotto ti forniamo una pa­no­ra­mi­ca degli operatori di confronto e ne spie­ghia­mo il fun­zio­na­men­to.

Operatore Si­gni­fi­ca­to Esempio Output
== Le stringhe sono uguali "Ciao" == "ciao" falso
== Le stringhe non sono uguali "Ciao" != "ciao" vero
< Ordine les­si­co­gra­fi­co minore "Australia" < "Zimbabwe" vero
> Ordine les­si­co­gra­fi­co maggiore "Australia" > "Zimbabwe" falso
<= Ordine les­si­co­gra­fi­co minore o uguale "Germania" <= "America" falso
>= Ordine les­si­co­gra­fi­co maggiore o uguale "Germania" <= "Germania" vero

In questo contesto, “ordine les­si­co­gra­fi­co” è un termine tecnico che cor­ri­spon­de “all’ordine al­fa­be­ti­co” e significa la stessa cosa. Le parole con un ordine les­si­co­gra­fi­co inferiore vengono collocate prima nell’alfabeto rispetto a quelle con un ordine les­si­co­gra­fi­co superiore. Ad esempio, la stringa “abcd” ha un ordine les­si­co­gra­fi­co inferiore rispetto alla stringa “xyz”.

È im­por­tan­te notare che gli spazi vuoti all’interno delle stringhe hanno l’ordine les­si­co­gra­fi­co più basso di tutti i caratteri. Prendendo i primi caratteri di una stringa come sot­to­strin­ga di Python, tale sot­to­strin­ga avrà sempre un ordine inferiore rispetto alla stringa ori­gi­na­ria. Ad esempio, la stringa “Alex” ha un ordine les­si­co­gra­fi­co inferiore rispetto alla stringa “Alexander”.

Inoltre, ri­cor­dia­mo che l’ordine les­si­co­gra­fi­co in Python non segue sempre l’ordine al­fa­be­ti­co tra­di­zio­na­le. Per esempio, Python valuterà l’espres­sio­ne a < b come “vera”, ma l’espres­sio­ne a < B come “falsa”. Questo è dovuto al fatto che sia nello standard ASCII che in quello Unicode, le lettere maiuscole sono co­di­fi­ca­te con valori inferiori rispetto alle lettere minuscole.

N.B.

Oltre al confronto fra stringhe, anche la for­mat­ta­zio­ne di testi è una parte im­por­tan­te di molti programmi. Nel nostro articolo relativo ai metodi della for­mat­ta­zio­ne delle stringhe in Python ti pre­sen­tia­mo i prin­ci­pa­li metodi e operatori di for­mat­ta­zio­ne.

Metodi di confronto

Oltre agli operatori di confronto, esistono anche alcuni metodi che con­sen­to­no di comparare le stringhe in base ad altri criteri:

Metodo De­scri­zio­ne Esempio Output
.startswith() Re­sti­tui­sce “vero” se i primi caratteri di una stringa cor­ri­spon­do­no a un’altra stringa "Benjamin".startswith("Ben") vero
.endswith() Re­sti­tui­sce “vero” se gli ultimi caratteri di una stringa cor­ri­spon­do­no a un’altra stringa "Benjamin".endswith("jasmin") falso
.find() Re­sti­tui­sce l’indice della prima oc­cor­ren­za di una sot­to­strin­ga; se la sot­to­strin­ga non esiste, re­sti­tui­sce -1. "Ragazza".find("gazza") 2

Con­fron­ta­re stringhe in Python: esempi di codice

Per chiarire il fun­zio­na­men­to degli operatori e dei metodi appena pre­sen­ta­ti, ti forniamo due esempi: uno semplice e uno un po’ più complesso.

Ve­ri­fi­ca­re se una lista è in ordine al­fa­be­ti­co

In questo esempio, il programma riceve un input di testo e genera una lista. Suc­ces­si­va­men­te, utilizza gli operatori di confronto per de­ter­mi­na­re se la lista è in ordine al­fa­be­ti­co.

input_lista = []
while(True):
    temp = input('Digita una parola. Se non vuoi inserire nessuna parola, digita \'.\' ')
    if temp == '.':
        break
    input_lista.append(temp)
print('Il tuo input: ', input_lista)
i = 0
alph = 1
while(i < len(input_lista) - 1):
    if(input_lista[i] > input_lista[i + 1]):
        print('Questa lista non è in ordine alfabetico!')
        alph = 0
        break
    i = i + 1
if(alph == 1):
    print('Questa lista è in ordine alfabetico.')
Python

Database di persone con funzione di ricerca

In questo esempio più complesso, l’utente è invitato a inserire cognomi e nomi di persone. Queste in­for­ma­zio­ni vengono inserite in una lista, che a sua volta viene inclusa in una lista più grande. Il risultato è una lista ni­di­fi­ca­ta in cui ogni sot­to­li­sta contiene il nome e il cognome di una persona. Questa lunga lista viene quindi ordinata in ordine al­fa­be­ti­co in base al cognome. Suc­ces­si­va­men­te, l’utente ha la pos­si­bi­li­tà di inserire del testo nel database per cercare le persone. Questo viene eseguito con il metodo di confronto .find()

# Input
persone = []
while(True):
    temp = input('Digita il cognome della persona. Se non vuoi inserire nessuna persona, digita \'.\' ')
    if temp == '.':
        break
    persona = []
    persona.append(temp)
    temp = input('Digita il nome della persona.')
    persona.append(temp)
    persone.append(persona)
print('Il tuo input: ', persone)
# Ordinato
persone.sort()
print('Ordinato: ', persone)
# Funzione ricerca
while(True):
    search = input('Inserisci una stringa per effettuare una ricerca nel database. Se non vuoi più cercare nessuna persona, digita \'.\' ')
    if search == '.':
        break
    for i in persone:
        if(i[0].find(search) != -1 or i[1].find(search) != -1):
            print('Trovata corrispondenza: ', i[0], ', ', i[1])
Python
Consiglio

Desideri pub­bli­ca­re online la tua ap­pli­ca­zio­ne in modo facile e veloce? Allora Deploy Now di IONOS è la soluzione perfetta per te.

Vai al menu prin­ci­pa­le