2016-08-08 16 views
1

内の文字列から\ XA0を削除する:は、私は言葉の束のリストを持っているリスト

lista = ['Jeux Olympiques De Rio\xa02016', 'Sahara Ray', 'Michael Phelps', 'Amber Alert'] 

私は'\xa0'を交換しようとした:

for element in listor: 
    element = element.replace('\xa0',' ') 

しかし、それは動作しませんでした。また、私は要素をprintとき、それは印刷します

print(lista[0]) 
Jeux Olympiques De Rio 2016 

誰もがこの問題を解決する方法についてのアイデアを持っていますか?

+3

を文字列は不変なので、2番目のコードブロックで文字列を変更することはありません。リスト内の要素を置換する必要があります – James

答えて

2

最も簡単な方法:

lista = [el.replace('\xa0',' ') for el in lista] 
+0

これは機能しますが、欠点があります。これは、*すべての文字列に 'replace'を呼び出します。それらの文字列には、不要なUnicode文字が含まれていないものも含まれます。 –

+0

しかし、著者はこの文字列が正確にどの文字列であるかわからない。 –

+0

働いて、ありがとう:) – imfromsweden

2
for index, element in enumerate(listor): 
    listor[index] = element.replace('\xa0',' ') 

これで、文字列自体を変更しようとするのではなく、リスト内の文字列を置換します。以前は、同じ変数名に新しい文字列を割り当てていましたが、これは前の文字列を変更するのではなく、 "要素"変数が指している文字列を変更するだけです。これにより、実際にはリスト要素を新しい文字列で上書きします。文字列が'\xa0'が含まれている場合

2

だけでエンディングを置き換えるために、リストの内包表記を使用します。

res = [elem if '\xa0' not in elem else elem.replace('\xa0', '') for elem in lista] 

をあなたの現在のアプローチは、単に実際にリストlistaを変更せずに名前(element)何度も再割り当てます。リストの内包表記は、元のリストの要素、すなわちで新しいリストを作成します:

for elem in lista 

をして\xa0すなわち含むすべての文字列に置き換えます。

elem if '\xa0' not in elem else elem.replace('\xa0', '') 
+0

replaceが文字列内に何も見つからない場合は、変更をそのまま返します: 'res = [elem.replace( '\ xa0'、 '') OKです – thodnev

+0

@thodnev確信していますが、 'in'を使うのは一般に関数呼び出しよりも高速です。私はその結果を主張するのではなく、むしろそれが必要ではないという事実を指摘していた。 –

+0

は、文字列の長さとリスト内のどの文字列を置換する必要があるかによって決まります。想像してみましょう。最後に '\ xa0'という長い文字列があるとしましょう。この場合は文字列を一度だけ繰り返し、charが必要であることを確認してから、置換ルーチン中に2回目を繰り返します。 'str.replace'は高速組み込みメソッドです。これは内部的に' in'メンバーシップテストと同じように実装されているため、オーバーヘッドはドット修飾です。 – thodnev

関連する問題