替换列表中的无值?

Posted

技术标签:

【中文标题】替换列表中的无值?【英文标题】:Replace None value in list? 【发布时间】:2013-10-22 05:36:41 【问题描述】:

我有:

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

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

预期效果:

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

尝试在字符串和 for 循环中替换,但出现错误:

TypeError: expected a character buffer object

【问题讨论】:

如果您需要将None 转换为字符串以执行接下来的操作(需要一个字符缓冲区对象),为什么不需要将1 转换为字符串也一样? 您可能想退后一步,首先考虑一下列表是如何构建的。 【参考方案1】:

使用简单的列表推导:

['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 单例。

【讨论】:

【参考方案2】:

您可以简单地使用map 并使用str 函数将所有项目 转换为字符串:

map(str, d)
#['1', 'q', '3', 'None', 'temp']

如果你只想转换 None 值,你可以这样做:

[str(di) if di is None else di for di in d]

【讨论】:

【参考方案3】:

使用 冗长且低效但对初学者友好 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 的回答在功率和效率方面更适合

【讨论】:

不要使用== NoneNone 是一个单例,使用 is None 更快、更 Python 和 PEP-8 兼容。 如果您的意思是这样,请始终使用is Nonei 可以是实现与None 比较为True 的类型。 @MartijnPieters singleton 是什么意思? 程序生命周期内只有一个副本的对象。 NoneTrueFalseEllipsisNotImplemented 都是 Python 本身的单例部分。【参考方案4】:

从 Python 3.6 开始,您可以使用更短的形式:

d = [f'e' for e in d]

希望这对某人有所帮助,因为我刚才遇到了这个问题。

【讨论】:

这里的 f'e' 是什么意思? 这是一个“f-string”——文字字符串插值。您可以在PEP 498 中查看更多信息。值得一读,因为它的功能很棒。【参考方案5】:

列表推导是正确的方法,但如果出于您最熟悉的原因,您宁愿将其替换为原地而不是创建一个新列表(认为 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']

【讨论】:

【参考方案6】:

我没有注意到使用 lambda 的任何答案..

想使用 lambda 的人....(查看 cmets 以获得解释。)

#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)

【讨论】:

以上是关于替换列表中的无值?的主要内容,如果未能解决你的问题,请参考以下文章

可浏览 API 中的无值

* ngFor-错误名称控件的无值访问器

在 spark sql 中用无值替换 Null 值

C - 结构中的无符号字符

python中的抓取显示无值[重复]

C中的无符号十六进制常量?