在列表中替换无值?

时间:2013-10-14 15:36:02

标签: python list replace

我有:

d = [1,'q','3', None, 'temp']

我想将None值替换为'None'或任何字符串

预期效果:

d = [1,'q','3', 'None', 'temp']

尝试在字符串和for循环中替换但是我收到错误:

TypeError: expected a character buffer object

6 个答案:

答案 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)