我有一个列表,我试图用0替换空字符串。有没有办法做到这一点,而不是遍历列表中的每个项目?
这是我的列表的一个较小的例子:
testlist=['',18.0,'','',0,15,8.0]
在Matlab中,我知道我可以这样做:
testlist[testlist=='']=0
但这似乎只会改变第一个值(即使它是一个空字符串以外的东西)。
在python中,您可以使用列表推导:
A = ['', 18.0, '', '', 0, 15, 8.0]
这里随后的A将''
值替换为0
。
A = [x if x != '' else 0 for x in A]
您可以通过多种方式执行此操作:
第一种方式是像其他答案一样使用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共享大量语法。