使用逻辑索引列表并转换值

时间:2018-04-04 21:06:16

标签: python list

我有一个列表,其中我试图用0替换空字符串。除了遍历列表中的每个项目之外,有没有办法做到这一点?

这是我的列表的一个较小的例子:

testlist=['',18.0,'','',0,15,8.0]

在Matlab中,我知道我可以这样做:

testlist[testlist=='']=0

但这似乎只会改变第一个值(即使它不是空字符串)。

2 个答案:

答案 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共享大量语法。