Programmes Python sur les opérations de chaîne
Publié: 2022-04-26Dans ce didacticiel, vous allez écrire des programmes Python pour résoudre les questions fréquemment posées sur les opérations sur les chaînes .
Vous apprendrez à vérifier si les chaînes Python sont des palindromes , des anagrammes et sont dans la casse du titre .
Chaînes Python : un examen rapide
En Python, les chaînes sont de puissants types de données intégrés. Ils peuvent stocker une séquence de caractères.
Indexation dans les chaînes Python : comme tous les itérables Python, les chaînes sont également indexées à zéro. Ainsi, les indices valides pour une chaîne de longueur N sont 0, 1, 2 jusqu'à N - 1.
Python prend également en charge l'indexation négative pour accéder aux éléments à partir de la fin de la chaîne. Donc -1 est l'index du dernier caractère de la chaîne, -2 est l'index de l'avant-dernier caractère de la chaîne, et ainsi de suite.
Immuabilité des chaînes Python : De plus, les chaînes en Python sont immuables, vous ne pouvez donc pas les modifier sur place. Cependant, vous pouvez appeler plusieurs méthodes de chaîne sur celles-ci et obtenir des copies de chaînes avec le résultat souhaité.
Maintenant que nous avons passé en revue les bases des chaînes Python, passons à la résolution de problèmes simples mais intéressants.
Commençons.
Vérifier si une chaîne Python est un palindrome
Problème : étant donné une chaîne Python, vérifier s'il s'agit ou non d'un palindrome.
Si oui, retournez True ; sinon, renvoie False.
Donc notre premier problème est de vérifier si oui ou non une chaîne donnée est un palindrome.
Un palindrome est une chaîne qui se lit de la même manière de gauche à droite et de droite à gauche. Citons quelques exemples : voiture de course, référence, niveau, madame, radar, etc.
Voici les étapes pour résoudre ce problème :
- Obtenez une copie inversée de la chaîne et stockez-la dans une autre variable, si nécessaire.
- Comparez les valeurs de la chaîne d'origine et de la chaîne inversée.
- S'ils sont égaux, la chaîne est un palindrome. Renvoyez donc True et arrêtez.
- Si les copies originales et inversées ne sont pas égales, la chaîne n'est pas un palindrome. Nous devrions donc retourner False .
L'opération clé consiste à obtenir une copie inversée de la chaîne. En Python, il existe plusieurs façons de procéder.
Cependant, nous passerons en revue deux approches :
- Utilisation du découpage de chaîne
- Utilisation de la fonction reversed() et de la méthode join()
Comment inverser une chaîne Python à l'aide du découpage
La syntaxe <any_str>[start: stop: step]
renvoie une tranche de la chaîne <any_str>
de start
jusqu'à mais sans inclure stop
, avec la taille de step
.
- Si vous omettez
start
, la tranche commence au début de la chaîne. - Si vous ne spécifiez pas l'index
stop
, la tranche s'étend jusqu'à la fin de la chaîne. - Et les valeurs négatives de
step
peuvent être utilisées pour renvoyer des tranches à partir de la fin de la chaîne.
Donc <any_str>[::-1]
renvoie une copie inversée de la chaîne.
La cellule de code suivante contient la définition de la fonction is_palindrome()
.
Il prend une chaîne comme argument et renvoie True
ou False
selon qu'il s'agit ou non d'un palindrome.
Ici, nous avons utilisé le découpage de chaîne pour obtenir une copie inversée de la chaîne.
def is_palindrome(this_str): rev_str = this_str[::-1] if (this_str == rev_str): return True else: return False
️ Maintenant que nous avons défini la fonction, nous pouvons continuer et appeler avec n'importe quelle chaîne valide comme argument.
is_palindrome("racecar") True
Dans la cellule de code ci-dessus, la voiture de racecar
est un palindrome. Ainsi, la fonction is_palindrome()
renvoie True
comme prévu.
Maintenant, essayez d'appeler la fonction avec n'importe quelle chaîne qui n'est pas un palindrome, comme river
.
is_palindrome("river") False
Et comme vous pouvez le voir, il renvoie False
, ce qui est correct.
Comment inverser une chaîne Python en utilisant reversed() et join()
En Python, vous pouvez utiliser la méthode join()
avec la fonction reversed()
pour inverser une chaîne.
- La fonction
reversed()
renvoie un itérateur inverse à travers les caractères de la chaîne. - La méthode
join()
peut ensuite être utilisée pour joindre ces caractères dans l'ordre inverse.
En utilisant la méthode ci-dessus, vous pouvez réécrire la fonction is_palindrome()
comme dans la cellule de code ci-dessous.
def is_palindrome(this_str): rev_str = ''.join(reversed(this_str)) if (this_str == rev_str): return True else: return False
Vous pouvez également utiliser la fonction is_palindrome()
dans la compréhension de liste pour collecter tous les palindromes à partir d'une liste plus longue de chaînes.
str_list = ["refer","blue","level","12321","dragon"] palindromes = [string for string in str_list if is_palindrome(string)] print(palindromes) # Output ['refer', 'level', '12321']
Voici comment fonctionne le code ci-dessus :
-
str_list
, appelezis_palindrome()
sur chaque chaîne. - Si
is_palindrome()
renvoieTrue
, ajoutez la chaîne à la liste despalindromes
.
Comme vous pouvez le voir dans la sortie ci-dessus, palindromes
est une liste de toutes les chaînes palindromiques dans str_list
.
Vérifiez si deux chaînes Python sont des anagrammes
Une autre question populaire que vous pouvez rencontrer dans les interviews est de vérifier si oui ou non une paire de chaînes str1
et str2
sont des anagrammes.
Deux chaînes sont dites anagrammes si le nombre de caractères dans les deux chaînes est exactement le même. Cela signifie que vous pouvez obtenir l'une des chaînes en permutant ou en réorganisant les caractères de l'autre chaîne.
Des exemples d'anagrammes incluent l'état-goût, le vase de sauvegarde, le coude en dessous, etc.
Comment vérifier les anagrammes à l'aide de l'objet compteur en Python
Une méthode simple et intuitive consiste à calculer le nombre d'occurrences de chaque caractère dans les deux chaînes. Et puis vérifiez si les comptes sont égaux.
Cela peut être fait d'autant plus facilement en utilisant l'objet Counter
du module itertools
. L'objet Counter renvoie un dictionnaire Python : avec les caractères comme clés et les nombres correspondants comme valeurs .
Considérez les chaînes "save"
et "vase"
comme indiqué ci-dessous.
str1 = "save" str2 = "vase"
Ici, c1
et c2
sont des objets compteur contenant respectivement le nombre de caractères des chaînes str1
et 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
renvoie True
car str1
et str2
sont des anagrammes.
En utilisant cette logique, nous pouvons maintenant continuer et définir la fonction are_anagrams()
avec deux paramètres word1
et word2
. Dans le corps de la fonction, nous vérifions si Counter(word1) == Counter(word2)
.
def are_anagrams(word1, word2): if Counter(word1) == Counter(word2): return True else: return False
️ Pour vérifier, appelez are_anagrams()
avec str1
, str2
comme arguments. Comme str1
et str2
sont des anagrammes ("save" et "vase"), la fonction renvoie True
, ce qui est correct.
are_anagrams(str1, str2) True
Comment vérifier les anagrammes à l'aide de copies triées de chaînes
Il existe une autre façon de procéder.
Si deux chaînes sont des anagrammes, alors leurs copies triées sont égales.
Nous pouvons donc réécrire la fonction are_anagrams()
pour vérifier si la version triée de str1
est la même que la copie triée de str2
. S'ils sont égaux, alors les deux chaînes sont des anagrammes ; sinon, ils ne le sont pas.
En utilisant la méthode ci-dessus pour vérifier l'égalité des copies triées, nous pouvons réécrire la fonction are_anagrams()
comme suit.
def are_anagrams(word1, word2): if sorted(word1) == sorted(word2): return True else: return False
Faisons maintenant quelques appels de fonction.
- Les chaînes "coude" et "ci-dessous" sont des anagrammes et la fonction
are_anagrams()
renvoieTrue
. - Et "état" et "goûté" ne sont pas des anagrammes, et la fonction renvoie
False
.
are_anagrams("below","elbow") True are_anagrams("state","tasted") False
Vérifier si une chaîne Python est en casse de titre
Voici notre dernière question pour ce tutoriel.
Problème : Étant donné une chaîne : le nom d'une personne—avec le prénom et le nom de famille.
Vous devez vérifier si la première lettre du prénom et du nom est en majuscule.
Ce type de casse où la première lettre de chaque mot est en majuscule s'appelle la casse du titre .
Vous devez donc vérifier si le nom est dans la casse du titre :
1. Si oui, affichez un message indiquant que le formatage est en casse de titre.
2. Sinon, renvoyez une copie de la chaîne formatée dans la casse du titre
- Python a une méthode de chaîne
istitle()
, qui vérifie si une chaîne est dans la casse du titre.
<str>.istitle()
renvoieTrue
si la chaîne<str>
est formatée dans la casse du titre, sinon elle renvoieFalse
.
- Et la méthode de chaîne de Python
title()
renvoie une copie de la chaîne formatée dans la casse du titre.
Alors maintenant, vous pouvez utiliser ces deux méthodes pour résoudre le problème.
Définissez une fonction check_titlecase()
qui accepte name
comme argument.
- Vous pouvez appeler la méthode
istitle()
sur la chaîne d'entrée pour vérifier si elle est formatée en casse de titre. - Si
True
, vous pouvez imprimer que la chaîne est déjà en casse de titre. - Sinon, vous pouvez appeler la méthode
title()
et renvoyer une copie de la chaîne dans la casse du titre.
La cellule de code suivante montre la définition de la fonction check_titlecase()
.
def check_titlecase(name): if name.istitle(): print(f"'{name}' is already formatted in title case.") else: return name.title()
Appelons maintenant la méthode check_titlecase()
avec un argument.
check_titlecase("jane smith") # Output Jane Smith
Dans la sortie ci-dessus, vous pouvez voir que la chaîne "Jane Smith" est maintenant dans la casse du titre.
️ Prenons un autre exemple.
check_titlecase("agatha Christie") # Output Agatha Christie
Cette fois, appelons la fonction avec une chaîne en casse de titre.
check_titlecase("Grace Hopper") # Output 'Grace Hopper' is already formatted in title case.
Nous sommes informés que la chaîne est formatée dans la casse du titre et que la fonction fonctionne comme prévu.
Conclusion
Résumons maintenant les problèmes dont nous avons discuté jusqu'ici.
- Pour vérifier si une chaîne est un palindrome, vérifiez si la chaîne et sa version inversée sont égales. Vous pouvez utiliser le découpage de chaînes ou des méthodes intégrées pour inverser les chaînes.
- Pour vérifier si deux chaînes sont des anagrammes, vérifiez si leurs copies triées sont égales. Et pour trier une chaîne, utilisez la fonction intégrée triée() .
- Pour vérifier si un nom est en casse de titre, utilisez la méthode .istitle() pour vérifier et la méthode .title() pour obtenir une copie en casse de titre de la chaîne.
J'espère que vous avez apprécié ce tutoriel sur les chaînes Python. Dans une prochaine étape, apprenez à utiliser les compréhensions de liste en Python ou découvrez l'opérateur non égal en Python.
Bon apprentissage et codage !