解决办法直接跳到末尾
目的:想要判断一个列表是否在另外的列表中 这里先说我正常能实现的结果:
eg:
z = [[2, 2, 2, 2], [1, 1, 1, 2]]
z1 = [-1.35, 2, 3, 4]
z2 = [2, 2, 2, 2]
# 判断z1 是否在 z 中:
if z1 not in z: # 如果 z1 不在 z 中,打印“zno”
print("zno")
# 结果:zno
# 判断z2 是否在 z 中:
if z2 in z: # 如果 z2 不在 z 中,打印“zno”
print("zno")
# 结果:zno
但是在我另外一个需求中,需要用到的数据是 numpy.ndarray 格式的:
z = np.array([[2, 2, 2, 2], [1, 1, 1, 2]],dtype=np.float32)
z1 = np.array([-1.35, 2, 3, 4],dtype=np.float32)
如果此时进行判断z1 是否在 z 中:
if z1 not in z: # 如果 z1 不在 z 中,打印“zno”
print("zno")
# 结果:什么也不输出
从而想到将其转换为列表类型:
z = list(np.array([[2, 2, 2, 2], [1, 1, 1, 2]],dtype=np.float32))
z1 = list(np.array([-1.35, 2, 3, 4],dtype=np.float32))
此时进行判断z1 是否在 z 中:
if z1 not in z: # 如果 z1 不在 z 中,打印“zno”
print("zno")
# 结果:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
解决办法:用 numpy 内置的类型转换函数 .tolist()
z = np.array([[2, 2, 2, 2], [1, 1, 1, 2]],dtype=np.float32)
z1 = np.array([-1.35, 2, 3, 4],dtype=np.float32)
if y1.tolist() not in y.tolist():# 如果 z1 不在 z 中,打印“zno”
print("zno")
# 结果:zno
至于为什么的话,没有深究,所以我也不知道
|