d = [1,'q','3', None, 'temp']
我想无值替换为“无”或任何字符串
预期的效果:
d = [1,'q','3', 'None', 'temp']
一个尝试替换字符串和循环,但我得到错误:
TypeError: expected a character buffer object
d = [1,'q','3', None, 'temp']
我想无值替换为“无”或任何字符串
预期的效果:
d = [1,'q','3', 'None', 'temp']
一个尝试替换字符串和循环,但我得到错误:
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
单。
使用冗长而低效但是对于初学者友好的循环就会是什么样子:
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答案更适合在功率和效率的手段
不要使用'== None'; 'None'是一个单身人士,使用'None'更快,更符合Pythonic和PEP-8标准。 –
@MartijnPieters如果你这么说... –
如果这是你的意思,总是使用'is None'。 'i'可以是一个类型,它将'None'与'True'比较。 –
列表理解是正确的方法,但万一出于您最了解的原因,您宁愿将其替换为原地位置,而不是创建新列表(争辩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']
您可以简单地使用map
和使用str
函数转换所有项目为字符串:
map(str, d)
#['1', 'q', '3', 'None', 'temp']
这会将'1'变成'1',OP样本输出只保留该值。 –
这是真的谢谢你!我编辑了答案... –
开始的Python 3.6,你可以在更短的形式做到这一点:
d = [f'{e}' for e in d]
希望这对某个人有帮助,因为我刚才有这个问题。
如果你需要把'None'变成一个字符串给你接下来要做的任何事情(那需要一个字符缓冲对象),为什么你不需要把'1'变成一个字符串呢? –
您可能需要退后一步,并考虑首先建立列表的方式。 – chepner