T をスペースに置き換えて関数を書きたいと思います。
b=""
xs=list("fghtThjchk")
for x in xs:
if x=="T" or "t":
x==" "
b=b+x
私は .replace でそれを行うことができますが、リストを使用してそれを行うことができるかどうかを知りたいです。
x==" "
x=" "
は、b が間違った値を取得する理由と同じではありません
if x=="T" or "t":
「x は 'T' または 't' のいずれか」という意味ではありません。if x in 'Tt':
このように、またはこのように言う必要がありますif x=="T" or x=="t":
おそらくこれはあなたがやろうとしていることです
b = ""
for x in "fghtThjchk":
if x == "T" or x == "t":
x = " "
b = b + x
この行はあなたが望むことをしません
if x=="T" or "t":
"t"
は trueと見なされるため、その条件は常に true と評価されます。
もしかして
if x=="T" or x=="t":
そして、言う行
x==" "
比較ではなく、割り当てであることを意味していたと思います。
x=" "
使用している構文は少し間違っています。リスト内包表記で if/else を使用する正しい方法を以下に示します。
''.join([' ' if x=='T' or x=='t' else x for x in xs])
-- この方法は、文字列の長さが長い場合に少し速くなり、最適化されます。
-- 上記の回答で文字列オブジェクトを何度も作成していますが、これはお勧めできません。
-- そのため、ループ内で文字列を連結するのではなく、すべての操作を実行した後、常にjoin()を使用してリストを結合します。
re
高速な (Regular Expression) モジュールを利用できます。
import re
aa = re.sub(r'([.tT])', " ", "fghtThjchk")
そうするとき、一度に1つの各要素にfor x in xs
名前を割り当てています。そうするとき(タイプミスだと思います)、名前を再割り当てしていますが、元の要素は変更していません。x
xs
x=" "
==
x
xs
次のように、インデックスでリストを参照する必要があります。
for i, x in enumerate(xs):
if x in ["T", "t"]:
xs[i] = " "