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.
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']
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']
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']
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