web-dev-qa-db-ja.com

pythonのアイテムのリストから特殊文字を削除する

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

私の期待される出力は、

_out_list = ["one","two","three"]
_

これらのアイテムにstrip()を単純に適用することはできません。助けてください。

5
pyd

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']
_
3
Martijn Pieters

ここに別の解決策があります:

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

出力:

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

これを試して:

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

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ではありません

0
Van Peer