Créer listes par longueur de mots - Python - Programmation
Marsh Posté le 11-01-2015 à 21:15:11
Déjà, réécrire ton code d'une manière plus pythonesque :
Code :
|
Marsh Posté le 11-01-2015 à 21:24:32
Pour le reste, je n'ai pas compris le rapport entre l'énoncé du problème et le résultat que tu nous montres; pour ma part, voici comment je procéderais, en ajoutant au début de chaque mot un préfixe numérique égal à la taille du mot. Ainsi .sort() trie d'abord la taille, puis le mot lui-même.
Code :
|
Qu'en penses-tu ?
Marsh Posté le 11-01-2015 à 21:35:32
Bah déjà merci !
Mais je suis débutant en python et ne connais donc pas l'ensemble des fonctions que tu utilises :
.items() → qu'est-ce ?
d'où vient la variable dest ?
Code :
|
Cette ligne ajoute que les lettres contenues dans characters_ok ?
Code :
|
Que fait cette ligne ?
Marsh Posté le 11-01-2015 à 21:47:36
suizokukan a écrit : pour ma part, voici comment je procéderais, en ajoutant au début de chaque mot un préfixe numérique égal à la taille du mot. Ainsi .sort() trie d'abord la taille |
Ya plus besoin de faire du DSU hein (et quand bien même c'était à base de tuples), tu peux filer une fonction key= à sort ou sorted qui calcule la clé de tri:
Code :
|
suizokukan a écrit : Qu'en penses-tu ? |
Les remplacements de caractères codés en dur c'est quand même cradox, perso j'utiliserais unicodedata pour faire une décomposition canonique et ne garder que les caractères de base:
Code :
|
=> ['ete', 'enleve', 'etre']
Et si les libs externes sont permises, Unidecode c'est encore mieux.
Marsh Posté le 11-01-2015 à 21:51:20
.items() → "d".items() renvoie une liste de couple (clef, valeur) du dictionnaire "d". La doc est ici : https://docs.python.org/3.4/library/stdtypes.html . Par exemple, j'aurais pu écrire :
Code :
|
ou encore
Code :
|
Le
Code :
|
est plus compliqué à comprendre. L'idée est d'éviter en Python d'ajouter les chaînes les unes aux autres avec "+" ou "+=", car c'est lent. Il est plus rapide de créer une liste :
Code :
|
... de la manipuler en ne retenant que les caractères autorisés :
Code :
|
... et enfin de transformer cette liste en chaîne de caractères en concaténant chaque élément, par exemple avec un "*" :
Code :
|
renverra quelque chose comme "*a*b", tandis que :
Code :
|
renverrait "ab"
S'agissant de
Code :
|
, pour chaque word dans content.split(), je l'ajoute à une nouvelle "liste" mais je fais d'abord précéder ce word de "{0:04}".format(len(word)).
"{0:04}".format(len(word)) est une manière de dire : crée une chaîne de caractères contenant une chaîne vide avec un argument nommé {0}, de quatre chiffres de longueur avec remplissage par des zéros s'il en manque ('0001' et non '1'). Le {0} est remplacé par len(word), soit la longueur de word.
Marsh Posté le 11-01-2015 à 21:55:08
> Pito2901, je souscris complètement au code de Masklinn. Ici, DSU=http://en.wikipedia.org/wiki/Disjo [...] _structure .
Marsh Posté le 11-01-2015 à 23:22:47
Presque, c'est decorate-sort-undecorate
Marsh Posté le 12-01-2015 à 17:42:42
Oups, merci, je ne connaissais pas.
Marsh Posté le 11-01-2015 à 18:02:34
Bonjour,
Je souhaite faire un programme qui d'abord :
- prend le texte d'un fichier.txt et le place dans une liste
- remplace les accents par les minuscules équivalentes
- enlève la ponctuation
- convertit la liste en minuscule
- sépare les mots
- tri les mots par longueur (puis ordre alphabétique)
Voici mon programme :
Or le programme m'affiche :
['a', 'a', 'a', 'a', 'amazone', 'aux', 'avoir', 'ces', 'craindre', 'de'...
Ce que j'aimerai, c'est qu'il affiche :
['a', 'a', 'a', 'a', 'ces', 'de', 'aux', 'avoir', 'amazone', 'craindre'...
Ensuite, est-il possible de classer les mots par longueur dans des listes différentes, exemple:
Une liste contenant tous les mots de longueur 1
puis de longueur 2
puis de longueur 4 (s'il n'y a pas 3...)
Merci de votre lecture.