2017-11-15 7 views
0
my_list = ["[email protected]", "two#", "thre%e"] 

を特殊文字を削除し、私の予想出力は、はpythonで項目のリストから

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

である私は、単にこれらの項目にstrip()を適用することはできません、助けてください。予想通り[email protected]3はタイプミスであると仮定すると、リストの内包

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

を使用して、ループ

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 

のための2つを使用して

+3

一つの文字列から特殊文字を削除する関数を書いてから、 'map'やリスト内包を使ってその関数を文字列のリストに適用します。 –

+0

ありがとう、@AdamSmith – pyd

+0

'on @ 3 'の' 3'はどこに行きましたか?数字も文字で置き換えていますか? –

答えて

0

、出力は

+0

解決してくれてありがとうございますが、このルーピングにはもっと時間がかかります] – pyd

+0

@pyd:あなたもループのためにループする必要があります。 –

+1

一方、* doubleループ*はここではあまりにも過剰です。 –

1

str.translate() methodを使用[email protected]ないoneになりますすべての文字列に同じ変換テーブルを適用する:

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

str.maketrans() static methodは、翻訳マップを作成するのに便利なツールです。最初の2つの引数は空の文字列です。文字を置き換えるのではなく、削除するだけなのでです。 3番目の文字列には、削除するすべての文字が格納されます。

デモ:

>>> my_list = ["[email protected]", "two#", "thre%e"] 
>>> removetable = str.maketrans('', '', '@#%') 
>>> [s.translate(removetable) for s in my_list] 
['on3', 'two', 'three'] 
+0

リストの最初の文字列に '3'が' e'に置き換えられました。 – roganjosh

+0

@roganjosh:*または*予想される入力または出力にエラーがあります。私はその質問の明確化を求めました。他の答えのどれもこれに対処していないことに注意してください。 –

+0

本当にありました、ごめんなさい。私は質問からあなたの答えに飛び乗って、質問の下にあなたのコメントを見ることなくあなたのリンクをフォローしました。 – roganjosh

0

これを試してみてください。

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

出力:

['on3', 'two', 'three'] 
ここ
l_in = ["[email protected]", "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'] 
0

は別のソリューションです
関連する問題