我测试了这段代码:
dic = {1:[[[1],2],[[2],3],[[3],4]],2:[[[5],6],[[7],8]],3:[[[9],10],[[11],12]]}
klst = list(dic.keys())
# print(klst)
print(dic[1])
for item in dic[klst[0]]:
if item == [[2],3]:
dic[klst[0]].remove(item)
print(item)
break
print(dic)
我得到以下输出:
^{pr2}$因此,remove()可以完美地从字典的值列表中删除列表。在
我实现了一个类似的结构,其中键是启发式值,值是列表列表。内部列表由一个numpy数组和一个字符串组成。例如:
[array([[10, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 0, 9, 11]]), 'left']
现在我正试图从字典中删除这样的列表
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
代码在前两次从字典中删除这样的列表时起作用
for move in index_move_priority:
for item in open_nodes[keylist[0]]: # item in list of states
if move == item[1]:
print("KLYST",keylist[0])
print("////////////////",open_nodes[keylist[0]])
print("ITEM->",item)
print(type(open_nodes[keylist[0]]))
print(type(item))
open_nodes[keylist[0]].remove(item)
find_neighbor_node = item
temp = True
break
if temp == True:
break
这里是我的字典。线
open_nodes[keylist[0]].remove(item)
导致值错误。我已经打印了keylist[0]以及open_nodes[keylist[0]]的内容,如下所示。在
KLYST 8
//////////////// [[array([[10, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 0, 9, 11]]), 'left'], [array([[10, 1, 2, 3],
[ 4, 0, 6, 7],
[ 8, 9, 5, 11]]), 'up-left'], [array([[10, 1, 0, 3],
[ 4, 5, 2, 7],
[ 8, 9, 6, 11]]), 'up'], [array([[10, 1, 2, 3],
[ 4, 0, 5, 7],
[ 8, 9, 6, 11]]), 'left'], [array([[10, 0, 2, 3],
[ 4, 5, 1, 7],
[ 8, 9, 6, 11]]), 'up-left']]
ITEM-> [array([[10, 1, 0, 3],
[ 4, 5, 2, 7],
[ 8, 9, 6, 11]]), 'up']
我不明白为什么我会得到模棱两可的值错误。 更新:在此处查找代码https://github.com/idk-kid/test/blob/master/test.ipynb
remove
使用相等性测试。对数组的这种测试不同于列表。在列表删除:
数组删除-您的错误
^{pr2}$如果我按位置引用数组,
remove
会起作用。首先比较测试标识:但是如果id不匹配,那么它将继续测试值。但是对数组的布尔测试生成布尔数组:
在需要标量的上下文中使用多元素数组(例如
if
子句)会产生此无效错误。在可以按值进行列表比较,返回标量:
列表和数组在很多方面都很相似,但通常不是相互替换的。在
编辑
当数组嵌套在列表中时,同样的情况也适用。使用你最后的指纹:
如果列表id匹配,则可以删除。但是如果他们不这样做的话,它就需要逐个元素地比较列表。但是当其中一个元素是数组时,它会遇到模糊性问题。在
相关问题 更多 >
编程相关推荐