我有一个列表,其中我试图用0替换空字符串。除了遍历列表中的每个项目之外,有没有办法做到这一点?
这是我的列表的一个较小的例子:
testlist=['',18.0,'','',0,15,8.0]
在Matlab中,我知道我可以这样做:
testlist[testlist=='']=0
但这似乎只会改变第一个值(即使它不是空字符串)。
答案 0 :(得分:2)
在python中,您可以使用列表解析:
A = ['', 18.0, '', '', 0, 15, 8.0]
此后续A的''
值已替换为0
。
A = [x if x != '' else 0 for x in A]
答案 1 :(得分:0)
您可以通过多种方式执行此操作:
第一种方法是使用list comprehension,就像其他答案一样:
a = ['',18.0,'','',0,15,8.0]
b = [x if x != '' else 0 for x in a]
这类似于:'用a的每个元素x创建一个数组b,如果x不是''然后放x,否则放0'。
还有一个名为numpy的令人敬畏的库,它使用的语法类似于您所指的Matlab的语法:
import numpy as np
a = ['',18.0,'','',0,15,8.0]
# Create a numpy array from the list
b = np.array(a)
b[b == ''] = 0
print(b)
>>> array(['0', '18.0', '0', '0', '0', '15', '8.0'],
dtype='<U4')
数组现在是一个字符串数组,您可以使用np.ndarray.astype(type)
将其转换为float或其他内容。
考虑到你已经提到了Matlab的语法,我建议看看numpy。在Python中编写脚本时,您会注意到numpy和Matlab共享大量语法。