_my_list = ["on@3", "two#", "thre%e"]
_
私の期待される出力は、
_out_list = ["one","two","three"]
_
これらのアイテムにstrip()
を単純に適用することはできません。助けてください。
str.translate()
method を使用して、すべての文字列に同じ変換テーブルを適用します。
_removetable = str.maketrans('', '', '@#%')
out_list = [s.translate(removetable) for s in my_list]
_
str.maketrans()
static method は、変換マップを作成するのに役立つツールです。最初の2つの引数は空の文字列です。文字を置き換えるのではなく、削除するだけだからです。 3番目の文字列には、削除するすべての文字が含まれています。
デモ:
_>>> my_list = ["on@3", "two#", "thre%e"]
>>> removetable = str.maketrans('', '', '@#%')
>>> [s.translate(removetable) for s in my_list]
['on3', 'two', 'three']
_
ここに別の解決策があります:
import re
my_list= ["on@3", "two#", "thre%e"]
print [re.sub('[^a-zA-Z0-9]+', '', _) for _ in my_list]
出力:
['on3', 'two', 'three']
これを試して:
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つのforループの使用
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
リスト内包表記の使用
out_list = [ x.replace(y,'') for x in my_list for y in l if y in x ]
3
in on@3
はタイプミスです。出力はon@3
およびone
ではありません