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

问题描述 投票:0回答:2

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

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

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

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

testlist[testlist=='']=0

但这似乎只会改变第一个值(即使它是一个空字符串以外的东西)。

python list
2个回答
2
投票

在python中,您可以使用列表推导:

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

这里随后的A将''值替换为0

A = [x if x != '' else 0 for x in A]

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

© www.soinside.com 2019 - 2024. All rights reserved.