所以我的问题是,我不能将二进制向量列表中的任何值替换为字符串。我的列表如下所示:
[[0 0 0 1 0 0 1 0 0 0 0 1 0 0 0]
[0 0 0 0 0 0 1 0 1 0 1 0 0 0 0]
[0 1 0 0 1 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 1 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 1 0 0 0 1 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]]
我想替换这些向量中的那些,但是根据这些向量的索引。 我试过这样的方法:
for row in list:
if(row[0] == 1):
row[0] == 'Alarm0'
else:
row[0] == ' '
if(row[1] == 1):
row[1] == 'Alarm1'
else:
row[1] == ' '
对于列表中的每一行也是这样。我知道这不是一个有效的方法,但它甚至不工作。它给了我一个错误:
ValueError: invalid literal for int() with base 10: ''
因此,我想删除所有0值并替换有1的字符串,但appriopate新文本取决于索引,即“1”出现的位置。 我的输出应该是:
[[Alarm3, Alarm6, Alarm11] -> because I have ones on indexes 3,6,11 in my input list
[Alarm6, Alarm8, Alarm10]
.
. same concept for all rows
.
[Alarm14]]
如有任何建议,我将不胜感激
编辑: 每个报警都应该是唯一的字符串,带有索引的报警只是我的示例。实际上,我有“连接丢失”之类的警报。Alarm0、Alarm1、Alarm2仅用于增强对我的问题的描述
您应该使用
for
循环来迭代每个row
。然后可以使用另一个嵌套的for
循环来迭代该行。每当它找到一个报警时,它应该将相应的报警添加到另一个列表中。在嵌套的for
循环的末尾,我们用构造的上面不是很优雅:我们可以使用列表理解来构建一个新的列表,并使用切片分配来优雅地替换整行:
如果您不想就地更新
data
,而是想构造一个新的2d列表,我们可以将其转换为嵌套列表理解:例如(基于您的样本数据):
编辑
如果报警有不同的名称,我们可以使用报警名称列表:例如:
然后我们可以将就地代码重写为
zip
:或用于生成新列表:
使用
alarm_names
:我们得到:
注意
'INTRUDER ALARM'
相关问题 更多 >
编程相关推荐