Python metodo contains per le stringhe

di Lorenzo Neri

Stai cercando una substring in una stringa? Hai notoato che in Python non esiste un metodo contains per le stringhe? In questo articolo scopriamo come fare.

Ciao mi chiamo Lorenzo Neri e sono un informatico: realizzo contenuti per aiutare le persone a padroneggiare l’arte del nuovo millennio, ovvero l’informatica!

Per tutti coloro che sono abituati a C# oppure Javascript potrebbero aver provato a fare qualcosa di simile se hanno già provato a programmare in Python e desiderano controllare se una stringa contiene una substring:

stringa = "Sono una stringa"
if stringa.contains("una"):
   print("La parola è presente")

O qualcosa come:

stringa = "Sono un'altra stringa"
if stringa.indexOf("una") >= 0:
   print("Sì, contiene la parola 'una'")

Ma ti sei accorto anche te che niente del genere funziona e tantomeno esiste in Python vero?

Purtroppo Python per quanto possa essere interessante e pratico, non offre un metodo contains per le stringhe.

Detto in un altro modo, Python non ha un metodo per individuare substring all’interno delle stringhe.

Perciò: come facciamo?

Preposizione

Python è talmente semplice e “colloquiale” che non ti salterebbe mai in informaticoa di usare le preposizioni.

Io dico, preposizioni, in realtà bisognerebbe parlare di espressioni.

Nel nostro caso, l’espressione che ci interessa è proprio la preposizione “in”.

Tramite l’espressione/preposizione “in” possiamo verificare questa cosa:

Possiamo controllare se un elemento ne contiene un altro

Utile vero?

Ma cerchiamo di capirne le potenzialità, soprattutto per risolvere il cruccio del metodo contains.

Una sottostringa è contenuta in una stirnga

Questo è un modo poco tenichese per dire che una substring è all’interno di una stringa.

Come facciamo a verificare ciò con Python e risolvere il tutto una volta per tutte?

Così:

stringaInCuiCercare = "Sono una stringa"
sottostringaDaCercare = "una"
if sottostringaDaCercare in stringaInCuiCercare:
   print("La sottostringa è presente")

Pratico, comodo e immediato vero?

Quindi, è vero che Python non ha a disposizione un metodo contains per le stringhe, ma mette a disposizione appunto questa espressione, anzi.

Python nasconde qualcosa sotto il cappello: il metodo __contains__

Ti ho raccontato una mezza bugia fino ad ora.

Da un lato dovevo: tu cerchi una soluzione rapida ed efficace.

Dall’altro devo anche fare questo: c’è un metodo “built-in” della classe “str” che è molto simile a quello che abbiamo visto all’inizio dell’articolo.

Non viene usato molto, anche perché è scomodo.

Un metodo “__contains__” esiste in Python, funziona pressappoco così:

stringa = "Ciao sono una stringa"
if stringa.__contains__("sono"):
   print("Sì, contiene questa parola")

Questo metodo fa parte di quelli “built-in” come dicevo prima della classe Python “str”.

Funziona con la stessa prassi dell’espressione “in”: torna “True” se la sottostringa è presente, diversamente torna “False”.

Ti suggerisco tuttavia, di fare uso dell’espressione “in” poiché il metodo “__contains__” è strettamente legato alla classe “str” e questo ti può dare problemi di tipizzazione.

Continua a scoprire di più con questi articoli!

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più