尽管对我来说解释这个问题有些困难,但我会尽力说明:
首先,我试图确认之前创建的数组中的某个位置是否为0,如果是,则用一个字符串替换这个0。之后,我希望再次确认这个位置是否仍然为0,如果不是,则将之前的字符串与一个新的字符串连接起来。
为了更好地理解,我将展示一段我的代码:
room1=np.array([["chair","table","book","computer","person"],[0,0,0,0,0]])
上面是数组(或矩阵)
if int(room1[1,k])==0: room1[1,k]=tipoObjF[1] #tipoObjF[1] 是我要替换0的字符串else: room1[1,k]=room1[1,k]+tipoObjF[1]
这里是我之前提到的操作:检查某个位置是否为0,如果是,则用字符串替换它。否则,只需连接两个字符串。
运行时出现了以下错误:
ValueError: invalid literal for int() with base10: 'chair1'
我希望我能正确地解释我的问题。这个错误出现在我使用ROS进行的一个项目中,chair1是第一个替换0的东西,并且应该是else语句中要连接的部分,期望的结果是Chair1Chair1。
提前感谢任何愿意帮助的人
编辑:最终数组应该如下所示:
room1=np.array([["chair","table","book","computer","person"],["chair1chair",0,0,0,0]])
回答:
如果你尝试在元素已经被替换为非整数字符串之后将 room[1,k]
转换为 int
,你将无法再对其调用 int()
。例如,int("chair1chair")
会抛出你看到的错误。
因为值可能是 int
或 string
,你可以改为首先比较字符串值,如下所示:
if str(room[1,k]) == "0": ...
这样做可以使 str(0) == "0"
返回 True
,但 str("hello") == "0"
会返回 False
。