words = ['Duration12', 'Noun1', 'Adjective7'] result = [word[:-2] for word in words] gives me ['Duration', 'Nou', 'Adjectiv'] But I want to get ['Duration', 'Noun', 'Adjective'] Is there any library function to implement it or should I explicitly detect the digits available and then remove them?
4 Réponses :
Vous pouvez utiliser une compréhension de liste et supprimer tous les chiffres en utilisant re.sub:
['Duration', 'Noun', 'Adjective']
Résultat
import re words = ['Duration12', 'Noun1', 'Adjective7'] [re.sub(r'[0-9]', '', w) for w in words]
Bon de savoir. Par curiosité, je cherche maintenant si ['Duration [12]', 'Noun [1]', 'Adjective [7]'] est également possible
Vous voulez supprimer également les crochets?
Utilisez [re.sub (r '[0-9] +', r '[\ g <0>]', w) pour w en mots]
for words = ['Duration12: 1', 'Noun', 'Adjective7: 8'] I am getting ['Duration [12]: [1]', 'Noun', 'Adjectif [7]: [8]'] Mais j'aime avoir ['Durée [12]: 1', 'Noun', 'Adjectif [7]: 8']
Vous pouvez filtrer les nombres en utilisant isalpha :
words = ['Duration12', 'Noun1', 'Adjective7'] result = [''.join(c for c in w if c.isalpha()) for w in words] print(result)
Essayez celui-ci:
In [8]: from string import digits
In [9]: remove_digits = str.maketrans('', '', digits)
In [10]: [word.translate(remove_digits) for word in words]
Out[10]: ['Duration', 'Noun', 'Adjective']
Pour plus d'informations, reportez-vous au lien: Lien
Si vous êtes sûr que tous les chiffres sont à la fin des mots, vous pouvez utiliser .strip de la manière suivante:
words = ['Duration12', 'Noun1', 'Adjective7']
results = [i.strip('0123456789') for i in words]
print(results) #give ['Duration', 'Noun', 'Adjective']
mais gardez à l'esprit que cette méthode ne le ferait pas fonctionne si les chiffres sont à l'intérieur plutôt qu'à la fin
Les chiffres seront-ils toujours à la fin des mots?
@learnerPy Vérifiez la réponse.
@Olivier Melançon ya. Et la réponse est déjà marquée comme acceptée ci-dessous