如何非迭代替换列表中空字符串为0?遇Matlab式写法问题
不用显式遍历替换列表中空字符串为0的方法
嘿,我懂你想要那种像Matlab一样简洁的写法,不用手动写for循环逐个处理元素对吧?先给你解释下为啥你试的testlist[testlist=='']=0在Python里不好使——Python的列表和Matlab的数组不一样,testlist==''会把整个列表和空字符串做比较,结果是一个单一的False,而Python里False会被当作索引0来处理,所以不管第一个元素是不是空字符串,都会被改成0,这就是你遇到的问题啦。
不过Python里还是有简洁的实现方式,不用显式写遍历逻辑,这里给你两种常用方法:
方法一:列表推导式
这是Python里最常用的简洁处理方式,看起来像是一行代码,内部是隐式遍历,但代码可读性很高:
testlist = ['',18.0,'','',0,15,8.0] testlist = [0 if x == '' else x for x in testlist]
运行后testlist就变成[0, 18.0, 0, 0, 0, 15, 8.0]啦,完美替换所有空字符串为0。
方法二:使用map结合lambda函数
如果你偏好函数式风格的写法,可以用map来批量处理元素,最后转成列表:
testlist = ['',18.0,'','',0,15,8.0] testlist = list(map(lambda x: 0 if x == '' else x, testlist))
这个效果和列表推导式完全一样,map会把列表里的每个元素传给lambda函数处理,再通过list()把处理后的迭代器转成列表。
这两种方法都不用你手动写for i in range(len(testlist))这种显式遍历代码,代码简洁程度和Matlab的写法差不多,而且在Python里是标准的实现方式哦。
内容的提问来源于stack exchange,提问作者Deborah Paul
相关产品推荐
相关产品推荐

