Erreur fonction filtrage mot
Résolu
raptor
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'essaye de coder une fonction qui prend une liste par exemple words = ['the','dog','got','a','bone'] et des lettres par exemple letters= 'ae' . La fonction doit me supprimer tous les mots de la liste qui n'ont pas une des lettres données. Dans notre cas la sortie est ['the', 'a', 'bone'].
j'ai coder la fonction suivante :
def filter_words(words, letters):
lst = [i for i in words]
for elem in letters:
for mot in words:
if elem not in mot:
lst.remove(mot)
return lst
je ne comprends pas pourquoi j'ai l'erreur suivante :
line 16, in filter_words
lst.remove(mot)
ValueError: list.remove(x): x not in list
pourriez vous m'expliquer l'erreur ?
J'essaye de coder une fonction qui prend une liste par exemple words = ['the','dog','got','a','bone'] et des lettres par exemple letters= 'ae' . La fonction doit me supprimer tous les mots de la liste qui n'ont pas une des lettres données. Dans notre cas la sortie est ['the', 'a', 'bone'].
j'ai coder la fonction suivante :
def filter_words(words, letters):
lst = [i for i in words]
for elem in letters:
for mot in words:
if elem not in mot:
lst.remove(mot)
return lst
je ne comprends pas pourquoi j'ai l'erreur suivante :
line 16, in filter_words
lst.remove(mot)
ValueError: list.remove(x): x not in list
pourriez vous m'expliquer l'erreur ?
Configuration: Windows / Firefox 100.0
A voir également:
- Suite à 5 erreurs sur votre mot de passe, votre compte est bloqué
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
- Mot de passe bios perdu - Guide
- Voir mot de passe wifi android - Guide
5 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
L'erreur me semble normale. Pour comprendre, ajoute des print() dans ton code.
Pour ce que tu ne comprends pas: ajoute dans ta liste de mots un mot qui contient a et e, et tu auras aussi l'erreur.
Pour ce que tu ne comprends pas: ajoute dans ta liste de mots un mot qui contient a et e, et tu auras aussi l'erreur.
Bonjour,
Déjà ..
En python, l'indentation étant primordiale ... merci de re poster ton code en utilisant les balises de code.
Explications disponibles ici : https://forums.commentcamarche.net/forum/affich-37598670-mise-en-forme-du-forum-et-des-fiches-pratiques-ccm#les-codes-sources
Ensuite, pourquoi utilises tu la variable lst ?
Ne peux tu pas directement faire le remove sur la variable words ?
Déjà ..
En python, l'indentation étant primordiale ... merci de re poster ton code en utilisant les balises de code.
Explications disponibles ici : https://forums.commentcamarche.net/forum/affich-37598670-mise-en-forme-du-forum-et-des-fiches-pratiques-ccm#les-codes-sources
Ensuite, pourquoi utilises tu la variable lst ?
Ne peux tu pas directement faire le remove sur la variable words ?
def filter_words(words, letters): for elem in letters: for mot in words: if elem not in mot: words.remove(mot) return words
le code me retourne ['a'] au lieu de ['the', 'a', 'bone']
C'est normal.
Il a retiré tous les mots qui ne contiennent pas la lettre a et tous les mots qui ne contiennent pas de e..
Une solution rapide que je vois serait d inverser tes deux boucles.
Pour chaque mot puis à l'intérieur pour chaque lettre
Dans ton if , tu mets une variable à true si la lettre n'est pas présente dans le mot.
À la fin de la boucle sur les lettres, tu regardes si la variable est toujoirs a true.
Si oui tu supprimes e mot.
Puis tu remets cette variable à false avant de passer au mois suivant..
Il a retiré tous les mots qui ne contiennent pas la lettre a et tous les mots qui ne contiennent pas de e..
Une solution rapide que je vois serait d inverser tes deux boucles.
Pour chaque mot puis à l'intérieur pour chaque lettre
Dans ton if , tu mets une variable à true si la lettre n'est pas présente dans le mot.
À la fin de la boucle sur les lettres, tu regardes si la variable est toujoirs a true.
Si oui tu supprimes e mot.
Puis tu remets cette variable à false avant de passer au mois suivant..
Sinon tu peux regarder comment faire une intersection entre deux listes
https://www.geeksforgeeks.org/python-intersection-two-lists/
https://www.geeksforgeeks.org/python-intersection-two-lists/
bonjour,
Il n'a pas retiré tous les mots qui ne contiennent pas e, sinon il n'aurait pas gardé le mot "a".
Ce n'est pas une bonne idée de faire une itération sur une liste tout en supprimant des éléments de cette liste.
Il est préférable, soit de faire une itération sur une copie de la liste:
Il n'a pas retiré tous les mots qui ne contiennent pas e, sinon il n'aurait pas gardé le mot "a".
Ce n'est pas une bonne idée de faire une itération sur une liste tout en supprimant des éléments de cette liste.
Il est préférable, soit de faire une itération sur une copie de la liste:
import copy #... for mot in copy.copy(words): #..., soit de travailler avec un index, et de commencer par la fin, à condition d'utiliser l'index pour la suppression:
for x in range(len(words)-1,-1,-1): mot=words[x] #... del words[x]
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
C'est pour éviter ce problème d’itération sur une liste tout en supprimant des éléments de la liste que dans ma première fonction j'avais créer une deuxième liste sur laquelle je supprimais mes éléments.
Mais j'obtiens une erreur line 13, in filter_words
lst.remove(mot)
ValueError: list.remove(x): x not in list
Ce que je ne comprends pas c'est ce qui je supprime le 'not' de 'il elem not in mot' ma fonction se lance et j'obtiens ['dog', 'got']
C'est pour éviter ce problème d’itération sur une liste tout en supprimant des éléments de la liste que dans ma première fonction j'avais créer une deuxième liste sur laquelle je supprimais mes éléments.
def filter_words(words, letters): lst = [i for i in words] for elem in letters: for mot in words: if elem not in mot: lst.remove(mot) return lst
Mais j'obtiens une erreur line 13, in filter_words
lst.remove(mot)
ValueError: list.remove(x): x not in list
Ce que je ne comprends pas c'est ce qui je supprime le 'not' de 'il elem not in mot' ma fonction se lance et j'obtiens ['dog', 'got']