我有:
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 3.6 开始,您可以以更短的形式执行此操作:
d = [f'{e}' for e in d]
希望这对某人有所帮助,因为不久前我遇到了这个问题。
列表理解是正确的方法,但如果出于您最了解的原因,您宁愿就地替换它而不是创建一个新列表(认为 python 列表是可变的),另一种方法是跟随
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']
我没有注意到使用 lambda 的任何答案。
想要使用 lambda 的人......(查看评论以获取解释。)
#INPUT DATA
d =[1,'q','3', None, 'temp']
#LAMBDA TO BE APPLIED
convertItem = lambda i : i or 'None'
#APPLY LAMBDA
res = [convertItem(i) for i in d]
#PRINT OUT TO TEST
print(res)