我有:
d = [1,'q','3', None, 'temp']
我想将None值替换为'None'或任何字符串
预期效果:
d = [1,'q','3', 'None', 'temp']
尝试在字符串和for循环中替换但是我收到错误:
TypeError: expected a character buffer object
答案 0 :(得分:50)
使用简单的列表理解:
['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
单例。
答案 1 :(得分:8)
您只需使用map
并使用str
功能将所有项转换为字符串:
map(str, d)
#['1', 'q', '3', 'None', 'temp']
如果您只想转换None
值,则可以执行以下操作:
[str(di) if di is None else di for di in d]
答案 2 :(得分:2)
使用冗长且低效但初学者友好的 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的答案更适合于力量和效率
答案 3 :(得分:1)
列表理解是正确的方法,但万一,出于最熟悉的原因,你宁愿替换它而不是创建一个新的列表(争论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']
答案 4 :(得分:1)
启动Python 3.6,您可以采用更短的形式:
d = [f'{e}' for e in d]
希望这对某人有帮助,因为我刚才有这个问题。
答案 5 :(得分:0)
我没有注意到使用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)