私が持っています:
d = [1,'q','3', None, 'temp']
None値を「None」または任意の文字列に置き換えたい
期待される効果:
d = [1,'q','3', 'None', 'temp']
文字列とforループで置き換えてみてくださいが、エラーが発生します:
TypeError: expected a character buffer object
単純なリスト内包表記を使用します。
['None' if v is None else v for v in d]
デモ:
>>> d = [1,'q','3', None, 'temp']
>>> ['None' if v is None else v for v in d]
[1, 'q', '3', 'None', 'temp']
is None
は、None
シングルトンに一致するかどうかをテストします。
単にmap
を使用し、str
関数を使用してすべてのアイテムを文字列に変換できます。
map(str, d)
#['1', 'q', '3', 'None', 'temp']
None
値のみを変換する場合は、次のことができます。
[str(di) if di is None else di for di in d]
長くて非効率的だが初心者に優しい forループを使用すると、次のようになります。
d = [1,'q','3', None, 'temp']
e = []
for i in d:
if i is None: #if i == None is also valid but slower and not recommended by PEP8
e.append("None")
else:
e.append(i)
d = e
print d
#[1, 'q', '3', 'None', 'temp']
初心者のみ、@ Martinsの回答はパワーと効率の点でより適しています
リストの内包表記は正しい方法ですが、場合によっては、最もよく知られている理由で、新しいリストを作成するのではなく、その場で置き換えてください(python list可変)、代替アプローチは次のとおりです
d = [1,'q','3', None, 'temp', None]
try:
while True:
d[d.index(None)] = 'None'
except ValueError:
pass
>>> d
[1, 'q', '3', 'None', 'temp', 'None']
Python 3.6から始めると、短い形式で実行できます。
d = [f'{e}' for e in d]
これが誰かに役立つことを願っています、それは私がほんの少し前にこの問題を抱えていたからです。