{"id":3291,"date":"2020-08-27T06:20:22","date_gmt":"2020-08-27T04:20:22","guid":{"rendered":"https:\/\/www.mathweb.fr\/euclide\/?p=3291"},"modified":"2022-03-06T16:03:48","modified_gmt":"2022-03-06T15:03:48","slug":"anagrammes-et-python","status":"publish","type":"post","link":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/","title":{"rendered":"Anagrammes et Python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Comment v\u00e9rifier que deux cha\u00eenes de caract\u00e8res sont des anagrammes en Python ? Plusieurs logiques peuvent \u00eatre envisag\u00e9es. Regardons cela.<\/p>\n\n\n\n<!--more-->\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/08\/Python-anagrammes-1024x640.png\" alt=\"anagrammes en Python\" class=\"wp-image-3292\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/08\/Python-anagrammes-1024x640.png 1024w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/08\/Python-anagrammes-300x188.png 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/08\/Python-anagrammes-600x375.png 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/08\/Python-anagrammes-768x480.png 768w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/08\/Python-anagrammes.png 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Au menu sur cette page...<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#Quest-ce_quune_anagramme\" >Qu&#8217;est-ce qu&#8217;une anagramme ?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#Anagrammes_et_Python_premiere_methode\" >Anagrammes et Python : premi\u00e8re m\u00e9thode<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#Une_deuxieme_approche_anagrammes_et_Python\" >Une deuxi\u00e8me approche : anagrammes et Python<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#Une_troisieme_approche_anagrammes_et_Python\" >Une troisi\u00e8me approche : anagrammes et Python<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#Conclusion\" >Conclusion<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#Construire_toutes_les_anagrammes\" >Construire toutes les anagrammes<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quest-ce_quune_anagramme\"><\/span>Qu&#8217;est-ce qu&#8217;une anagramme ?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ben oui, avant de parler d&#8217;anagrammes, il faut savoir ce que c&#8217;est non ?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Une anagramme (oui, c&#8217;est f\u00e9minin) d&#8217;une cha\u00eene de caract\u00e8res est une cha\u00eene de caract\u00e8res form\u00e9e des m\u00eames caract\u00e8res mis dans un ordre diff\u00e9rent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ainsi, &#8220;ABC&#8221; et &#8220;BAC&#8221; sont deux anagrammes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons supposer par la suite que <em>a<\/em> et <em>b<\/em> sont deux cha\u00eenes de caract\u00e8res de m\u00eame longueur (pour les calculs de complexit\u00e9).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Anagrammes_et_Python_premiere_methode\"><\/span>Anagrammes et Python : premi\u00e8re m\u00e9thode<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La m\u00e9thode la plus simple pour voir si deux cha\u00eenes de caract\u00e8res sont anagrammes est la suivante:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def anagramme(a,b):\n    if sorted(a) == sorted(b):\n        return True\n    else:\n        return False<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La complexit\u00e9 est en \\(\\mathcal{O}(n\\ln n)\\) en moyenne, o\u00f9 <em>n<\/em> est le nombre de caract\u00e8res d&#8217;une cha\u00eene. En effet, l&#8217;algorithme de tri utilis\u00e9 par Python est <em><a href=\"https:\/\/en.wikipedia.org\/wiki\/Timsort\" target=\"_blank\" rel=\"noreferrer noopener\">timsort<\/a><\/em>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Une_deuxieme_approche_anagrammes_et_Python\"><\/span>Une deuxi\u00e8me approche : anagrammes et Python<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cette m\u00e9thode est quasi-analogue \u00e0 la pr\u00e9c\u00e9dente, si ce n&#8217;est qu&#8217;elle fait appel au module <em>collections<\/em>.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from collections import Counter\n\ndef anagramme(a,b):\n    if Counter(a) == Counter(b):\n        return True\n    else:\n        return False<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Counter(a) est un objet, d\u00e9fini par la classe <em>Counter<\/em>, qui se comporte comme un dictionnaire. C&#8217;est d&#8217;ailleurs une sous-classe de <em>dict<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La complexit\u00e9 de cette solution est alors en \\(\\mathcal{O}(n)\\).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Une_troisieme_approche_anagrammes_et_Python\"><\/span>Une troisi\u00e8me approche : anagrammes et Python<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">S&#8217;inspirant de la m\u00e9thode pr\u00e9c\u00e9dente, on peut construire directement un dictionnaire \u00e0 partir de la cha\u00eene de caract\u00e8res:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def anagramme(a,b):\n    dict_a , dict_b = dict() , dict()\n    for i in a:\n        dict_a[i] = 1 if i not in dict_a else dict_a[i]+1\n    for i in b:\n        dict_b[i] = 1 if i not in dict_b else dict_b[i]+1\n    \n    if dict_a == dict_b:\n        return True\n    else:\n        return False<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On voit bien ici que la complexit\u00e9 est en \\(\\mathcal{O}(n)\\).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si on cherche a avoir une complexit\u00e9 minimale, ainsi qu&#8217;une syntaxe minimale, il vaut mieux utiliser le module <em>collections<\/em> et la classe <em>Counter<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cet article est en marge des ressources Python pour le lyc\u00e9e, <a href=\"https:\/\/www.mathweb.fr\/euclide\/ressources-python\/\">disponibles sur cette page<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Construire_toutes_les_anagrammes\"><\/span>Construire toutes les anagrammes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Concernant la g\u00e9n\u00e9ration de toutes les anagrammes d&#8217;un mot, c&#8217;est une autre affaire, bien plus complexe!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il existe de nombreuses fa\u00e7ons d&#8217;impl\u00e9menter la g\u00e9n\u00e9ration d&#8217;anagrammes, la plupart reposant sur le principe de r\u00e9cursivit\u00e9. Mais attention aux solutions trop gourmandes du point de vue ressources&#8230; car il est tr\u00e8s facile de saturer la RAM avec ce genre de choses!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans le programme suivant, de seulement 8 lignes, je choisis d&#8217;utiliser le mot-cl\u00e9 <strong>yield<\/strong>, tr\u00e8s peu utilis\u00e9 au lyc\u00e9e (voire pas du tout car tr\u00e8s compliqu\u00e9 \u00e0 cerner \u00e0 ce niveau) car il permet la manipulation de nombreuses donn\u00e9es.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def anagrammes(mot):\n    if len(mot) == 1:\n        yield mot\n    else :\n        for z in set(mot): # set(mot) permet de cr\u00e9er un ensemble de lettres DISTINCTES\n            i = mot.index(z)\n            for sm in anagrammes( mot[0:i] + mot[i+1:] ):\n                yield z + sm<\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; for m in anagrammes(\"MOTO\"): print(m)\nTOOM\nTOMO\nTMOO\nOTOM\nOTMO\nOMTO\nOMOT\nOOTM\nOOMT\nMTOO\nMOTO\nMOOT<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;id\u00e9e ici est de construire une fonction r\u00e9cursive anagrammes(mot) qui consiste \u00e0 retourner le mot lui-m\u00eame s&#8217;il n&#8217;est constitu\u00e9 que d&#8217;une seule lettre, et sinon, de parcourir ce mot lettre \u00e0 lettre et de former une anagramme commen\u00e7ant par cette lettre et form\u00e9e ensuite de toutes les anagrammes du mot restant une fois que l&#8217;on lui a \u00f4t\u00e9 cette lettre (d&#8217;o\u00f9 la r\u00e9cursivit\u00e9).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bien entendu, la liste compl\u00e8te peut s&#8217;av\u00e9rer tr\u00e8s longue et la plupart des anagrammes peuvent \u00eatre insens\u00e9s. C&#8217;est la raison pour laquelle est il serait int\u00e9ressant d&#8217;ajouter une sorte de filtre. On aurait ainsi uniquement les mots qui existent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je vous propose alors le script suivant:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from unidecode import unidecode\n\ndef anagrammes(mot):\n    if len(mot) == 1:\n        yield mot\n    else :\n        for z in set(mot): # set(mot) permet de cr\u00e9er un ensemble de lettres DISTINCTES\n            i = mot.index(z)\n            for sm in anagrammes( mot[0:i] + mot[i+1:] ):\n                yield z + sm\n\ndef anag(mot):\n    mot = mot.upper()\n    M = []\n    \n    # on construit une liste des mots de m\u00eame longueur que 'mot'\n    \n    with open('mots.txt' , 'r' , encoding='utf-8') as w:\n        for l in w:\n            if len(l[:-1]) == len(mot) and unidecode(l[:-1]) not in M:\n                M.append(unidecode(l[:-1]))\n    \n    L = [ word for word in M if word in anagrammes(mot) ]\n        \n    return L<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On aurait ainsi, par exemple:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>>>> anag('NICHE')\n&#91;'CHIEN', 'CHINE', 'NICHE']<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vous avez sans doute remarqu\u00e9 la pr\u00e9sence du fichier externe <em>mots.txt<\/em> qui contient tous les mots de la langue (on peut trouver ce genre de fichiers en faisant une recherche sur le net, comme par exemple <a href=\"https:\/\/www.freelang.com\/dictionnaire\/dic-francais.php\" target=\"_blank\" rel=\"noreferrer noopener\">ici<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le probl\u00e8me de ce script est tout de m\u00eame sa complexit\u00e9. En effet, pour afficher les anagrammes de &#8220;python&#8221;, il faut un peu plus que 18 secondes ! Autant dire qu&#8217;il n&#8217;est pas du tout performant&#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je vais donc l\u00e9g\u00e8rement modifier le script pr\u00e9c\u00e9dent afin que sa complexit\u00e9 soit bien moindre:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from unidecode import unidecode\nfrom itertools import permutations \n\ndef anagrammes(mot):\n    mot = mot.upper()\n    M = []\n    A = [''.join(list(i)) for i in permutations(mot) ]\n    \n    # on construit une liste des mots de m\u00eame longueur que 'mot'\n    \n    with open('mots.txt' , 'r' , encoding='utf-8') as w:\n        for l in w:\n            if len(l[:-1]) == len(mot) and unidecode(l[:-1]) not in M:\n                M.append(unidecode(l[:-1]))\n    \n    L = [ word for word in M if word in A]\n        \n    return L<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">C&#8217;est bien meilleur: 1,61 seconde pour:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>>>> anagrammes('python')\n&#91;'PYTHON', 'TYPHON']<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pr\u00e8s de 11 fois plus rapide! Ouf!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comment v\u00e9rifier que deux cha\u00eenes de caract\u00e8res sont des anagrammes en Python ? Plusieurs logiques peuvent \u00eatre envisag\u00e9es. Regardons cela.<\/p>\n","protected":false},"author":1,"featured_media":3721,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5],"tags":[239],"class_list":["post-3291","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatique","category-python","tag-anagrammes"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Anagrammes et Python - Mathweb.fr - Plusieurs m\u00e9thodes<\/title>\n<meta name=\"description\" content=\"Comment v\u00e9rifier que deux cha\u00eenes de caract\u00e8res sont des anagrammes en Python ? Plusieurs logiques peuvent \u00eatre envisag\u00e9es. Regardons cela.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Anagrammes et Python - Mathweb.fr - Plusieurs m\u00e9thodes\" \/>\n<meta property=\"og:description\" content=\"Comment v\u00e9rifier que deux cha\u00eenes de caract\u00e8res sont des anagrammes en Python ? Plusieurs logiques peuvent \u00eatre envisag\u00e9es. Regardons cela.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Mathweb.fr\" \/>\n<meta property=\"article:published_time\" content=\"2020-08-27T04:20:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-06T15:03:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/08\/python-anagrammes-head.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"740\" \/>\n\t<meta property=\"og:image:height\" content=\"198\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"St\u00e9phane Pasquet\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"St\u00e9phane Pasquet\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/08\\\/27\\\/anagrammes-et-python\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/08\\\/27\\\/anagrammes-et-python\\\/\"},\"author\":{\"name\":\"St\u00e9phane Pasquet\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"headline\":\"Anagrammes et Python\",\"datePublished\":\"2020-08-27T04:20:22+00:00\",\"dateModified\":\"2022-03-06T15:03:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/08\\\/27\\\/anagrammes-et-python\\\/\"},\"wordCount\":677,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/08\\\/27\\\/anagrammes-et-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/08\\\/python-anagrammes-head.jpg\",\"keywords\":[\"anagrammes\"],\"articleSection\":[\"Informatique\",\"Python\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/08\\\/27\\\/anagrammes-et-python\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/08\\\/27\\\/anagrammes-et-python\\\/\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/08\\\/27\\\/anagrammes-et-python\\\/\",\"name\":\"Anagrammes et Python - Mathweb.fr - Plusieurs m\u00e9thodes\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/08\\\/27\\\/anagrammes-et-python\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/08\\\/27\\\/anagrammes-et-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/08\\\/python-anagrammes-head.jpg\",\"datePublished\":\"2020-08-27T04:20:22+00:00\",\"dateModified\":\"2022-03-06T15:03:48+00:00\",\"description\":\"Comment v\u00e9rifier que deux cha\u00eenes de caract\u00e8res sont des anagrammes en Python ? Plusieurs logiques peuvent \u00eatre envisag\u00e9es. Regardons cela.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/08\\\/27\\\/anagrammes-et-python\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/08\\\/27\\\/anagrammes-et-python\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/08\\\/27\\\/anagrammes-et-python\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/08\\\/python-anagrammes-head.jpg\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/08\\\/python-anagrammes-head.jpg\",\"width\":740,\"height\":198},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/08\\\/27\\\/anagrammes-et-python\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Anagrammes et Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\",\"name\":\"Mathweb.fr\",\"description\":\"Math\u00e9matiques, LaTeX et Python\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\",\"name\":\"St\u00e9phane Pasquet\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"width\":74,\"height\":77,\"caption\":\"St\u00e9phane Pasquet\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Anagrammes et Python - Mathweb.fr - Plusieurs m\u00e9thodes","description":"Comment v\u00e9rifier que deux cha\u00eenes de caract\u00e8res sont des anagrammes en Python ? Plusieurs logiques peuvent \u00eatre envisag\u00e9es. Regardons cela.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/","og_locale":"fr_FR","og_type":"article","og_title":"Anagrammes et Python - Mathweb.fr - Plusieurs m\u00e9thodes","og_description":"Comment v\u00e9rifier que deux cha\u00eenes de caract\u00e8res sont des anagrammes en Python ? Plusieurs logiques peuvent \u00eatre envisag\u00e9es. Regardons cela.","og_url":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/","og_site_name":"Mathweb.fr","article_published_time":"2020-08-27T04:20:22+00:00","article_modified_time":"2022-03-06T15:03:48+00:00","og_image":[{"width":740,"height":198,"url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/08\/python-anagrammes-head.jpg","type":"image\/jpeg"}],"author":"St\u00e9phane Pasquet","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"St\u00e9phane Pasquet","Dur\u00e9e de lecture estim\u00e9e":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#article","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/"},"author":{"name":"St\u00e9phane Pasquet","@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"headline":"Anagrammes et Python","datePublished":"2020-08-27T04:20:22+00:00","dateModified":"2022-03-06T15:03:48+00:00","mainEntityOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/"},"wordCount":677,"commentCount":4,"publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/08\/python-anagrammes-head.jpg","keywords":["anagrammes"],"articleSection":["Informatique","Python"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/","url":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/","name":"Anagrammes et Python - Mathweb.fr - Plusieurs m\u00e9thodes","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#primaryimage"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/08\/python-anagrammes-head.jpg","datePublished":"2020-08-27T04:20:22+00:00","dateModified":"2022-03-06T15:03:48+00:00","description":"Comment v\u00e9rifier que deux cha\u00eenes de caract\u00e8res sont des anagrammes en Python ? Plusieurs logiques peuvent \u00eatre envisag\u00e9es. Regardons cela.","breadcrumb":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#primaryimage","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/08\/python-anagrammes-head.jpg","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/08\/python-anagrammes-head.jpg","width":740,"height":198},{"@type":"BreadcrumbList","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/08\/27\/anagrammes-et-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.mathweb.fr\/euclide\/"},{"@type":"ListItem","position":2,"name":"Anagrammes et Python"}]},{"@type":"WebSite","@id":"https:\/\/www.mathweb.fr\/euclide\/#website","url":"https:\/\/www.mathweb.fr\/euclide\/","name":"Mathweb.fr","description":"Math\u00e9matiques, LaTeX et Python","publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mathweb.fr\/euclide\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69","name":"St\u00e9phane Pasquet","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","width":74,"height":77,"caption":"St\u00e9phane Pasquet"},"logo":{"@id":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp"}}]}},"_links":{"self":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts\/3291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/comments?post=3291"}],"version-history":[{"count":0,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts\/3291\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media\/3721"}],"wp:attachment":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media?parent=3291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/categories?post=3291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/tags?post=3291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}