Python >> Tutoriel Python >  >> Python

Anagrammes Python en Python à une ligne

https://fast.wistia.net/embed/iframe/nzhxmv3w7l
sorted("elvis") == sorted("lives")
# True

Pourquoi apprendre les anagrammes Python ?

Une question populaire dans les interviews de programmation est de créer un vérificateur d'anagrammes.

L'intervieweur veut tester vos connaissances sur la terminologie de base en informatique et votre capacité à développer vos propres algorithmes simples pour résoudre les problèmes auxquels vous êtes confrontés. Dans cet article, vous découvrirez un algorithme simple pour trouver des anagrammes en Python.

La plupart des étudiants qui ont suivi une formation universitaire en informatique savent exactement quoi faire ici. Lorsqu'elle est posée lors d'un entretien de codage, cette question sert de test qui révèle immédiatement si vous faites partie de cette communauté. Alors préparons-nous !

Formulation du problème

Que sont les anagrammes ? Deux mots sont des anagrammes s'ils sont composés des mêmes caractères.

? "Une anagramme est un mot ou une phrase formé en réarrangeant les lettres d'un mot ou d'une phrase différente, en utilisant généralement toutes les lettres d'origine exactement une fois." (Wikipédia)

Voici quelques exemples :

  • "écouter" → "silencieux"
  • "enterrement" → "vraiment amusant"
  • « elvis » → « vit »

Défi :Crée un programme Python qui vérifie deux mots x1 et x2 si x1 est un anagramme de x2 . Plus précisément :Donnés sont deux chaînes x1 et x2 . Ecrire une fonction is_anagram qui renvoie True si chaîne x2 une anagramme de la chaîne x1 !

Ok, maintenant vous savez exactement quoi faire, n'est-ce pas ? Alors, commençons à coder.

Vérificateur d'anagrammes

La solution one-liner suivante (de mon livre Python One-Liners) résout ce problème facilement et de manière très concise.

## Python Anagram One-Liner
is_anagram = lambda x1, x2: sorted(x1) == sorted(x2)

Si vous n'aimez pas les one-liners, vous pouvez également créer la même fonction de vérification d'anagrammes is_anagram() en deux lignes :

def is_anagram(x1, x2):
    return sorted(x1) == sorted(x2)

? La fonction is_anagram(x1, x2) renvoie simplement le résultat de l'expression sorted(x1) == sorted(x2) qui est True si les séquences de caractères triées sont constituées des mêmes caractères.

Le one-liner résout le problème efficacement et correctement. Deux chaînes sont des anagrammes si elles ont la même séquence de caractères triés . C'est si facile. Il n'y a pas besoin de dépendances externes - nous créons simplement une fonction is_anagram dans une seule ligne de code en utilisant la définition de la fonction lambda avec deux arguments x1 et x2 .

Voici le résultat des deux séquences de caractères triées :

print(sorted("elvis"))
# ['e', 'i', 'l', 's', 'v']

print(sorted("lives"))
# ['e', 'i', 'l', 's', 'v']

Les deux chaînes "elvis" et "lives" se composent des mêmes caractères, de sorte que la représentation de la liste triée est la même. Ainsi, le résultat des trois print() déclarations dans l'extrait de code en une ligne est la suivante :

## Results
print(is_anagram("elvis", "lives")) # True
print(is_anagram("elvise", "livees")) # True
print(is_anagram("elvis", "dead")) # False

Arrière-plan trié()

Pour en savoir plus sur le sorted() fonction, consultez mon didacticiel détaillé sur le blog Finxter ou regardez la vidéo suivante :