J'ai une fonction qui prend une chaîne de caractères et a des paramètres pour ignorer la casse et les accents. Tout semble fonctionner lorsque j'utilise une boucle for
pour le paramètre ignorer_accents
. Lorsque j'essaie d'utiliser une compréhension de liste, cependant, cela ne renvoie plus la valeur attendue.
S'agit-il simplement d'une erreur de syntaxe ? Je ne parviens pas à mettre en œuvre la compréhension de liste. J'ai consulté Meilleure façon de remplacer plusieurs caractères dans une chaîne de caractères ? et quelques autres messages.
def count_letter_e_text(file_text, ignore_accents, ignore_case):
e = "e"
acc_low_e = ["é", "ê", "è"]
if ignore_case is True:
file_text = file_text.lower()
if ignore_accents is True:
# cela fonctionne
#file_text = file_text.replace("é", e).replace("ê", e).replace("è", e)
# cela fonctionne aussi
# for ch in acc_low_e:
# if ch in file_text:
# file_text = file_text.replace(ch, e)
# ne fonctionne pas avec la compréhension de liste
#file_text = [ch.replace(ch, e) for ch in file_text if ch in acc_low_e] # donne un comptage de 6
file_text = [file_text.replace(ch, e) for ch in acc_low_e if ch in file_text] # donne un comptage de 0
num_of_e = file_text.count(e)
return num_of_e
Programme principal :
text = "Phrase 1 test contient e, é, ê, è, E, É, Ê, È"
# en attendent un compte de 12 ; en utilisant la compréhension de liste, c'est 0
text_e_count = count_letter_e_text(text, True, True)
text_e_count