web-dev-qa-db-fra.com

suppression de caractères spéciaux d'une liste d'éléments dans python

my_list = ["on@3", "two#", "thre%e"]

ma sortie attendue est,

out_list = ["one","two","three"]

Je ne peux pas simplement appliquer strip() à ces éléments, veuillez aider.

5
pyd

Utilisez la méthode str.translate() pour appliquer la même table de traduction à toutes les chaînes:

removetable = str.maketrans('', '', '@#%')
out_list = [s.translate(removetable) for s in my_list]

La méthode statique str.maketrans() est un outil utile pour produire la carte de traduction; les deux premiers arguments sont des chaînes vides car vous ne remplacez pas des caractères, vous ne supprimez que des caractères. La troisième chaîne contient tous les caractères que vous souhaitez supprimer.

Démo:

>>> my_list = ["on@3", "two#", "thre%e"]
>>> removetable = str.maketrans('', '', '@#%')
>>> [s.translate(removetable) for s in my_list]
['on3', 'two', 'three']
3
Martijn Pieters

Voici une autre solution:

import re
my_list= ["on@3", "two#", "thre%e"]
print [re.sub('[^a-zA-Z0-9]+', '', _) for _ in my_list]

sortie:

['on3', 'two', 'three']
8
Mahesh Karia

essaye ça:

l_in = ["on@3", "two#", "thre%e"]
l_out = [''.join(e for e in string if e.isalnum()) for string in l_in]
print l_out
>['on3', 'two', 'three']
2
SP SP

Utilisation de deux boucles

l = ['@','#','%']
out_list = []
for x in my_list:
    for y in l:
        if y in x:
            x = x.replace(y,'')
            out_list.append(x)
            break

Utiliser la compréhension de liste

out_list = [ x.replace(y,'')  for x in my_list for y in l if y in x ]

En supposant 3 dans on@3 est une faute de frappe, la sortie sera on@3 et non one comme prévu

0
Van Peer