如何精确比较嵌套 for 循环中的值

How to precisely compare values in a nested for loop

提问人:Ekeuwei 提问时间:7/1/2022 最后编辑:M. JustinEkeuwei 更新时间:11/15/2023 访问量:123

问:

我正在尝试比较嵌套 for 循环中二维数组的值,但在这种情况下我似乎无法获得正确的关系操作。

因此,我正在遍历二维数组,并将其值与另一个一维数组中的值进行比较,我度过了非常有趣的一天。

import numpy as np

packetsDb = np.empty((0,4))

head = [['AAA', 'BBB', 'CCC', 'DDD']]
packet1 = [[255, 256, 257, 258]]
packet2 = [[255, 256, 257, 259]]
test = [255, 256, 257, 259]


packetsDb = np.append(packetsDb, np.array(head), axis=0)
packetsDb = np.append(packetsDb, np.array(packet1), axis=0)
packetsDb = np.append(packetsDb, np.array(packet2), axis=0)

for x in packetsDb:
   for y in x:
       print(test[0], y, test[0] == y)
//Result
255 AAA False
255 BBB False
255 CCC False
255 DDD False
255 255 False //What's happening here
255 256 False
255 257 False
255 258 False
255 255 False //and here
255 256 False
255 257 False
255 259 False
python numpy 平等

评论

1赞 MangoNrFive 7/2/2022
您在示例中打印了 test[0] 和 y,但比较了 test[2] 和 y。这些索引似乎有问题,或者我不明白,你想用这些打印语句显示什么。
0赞 Ekeuwei 7/2/2022
是的,我只是在测试其他东西,看看我做错了什么,我在发布代码之前没有撤消代码。但是,我已经更新了问题,问题仍然存在。

答:

1赞 MangoNrFive 7/2/2022 #1

起初,结果确实有悖常理,但一旦你打印了类型,它就会变得更加清晰:

for x in packetsDb:
    for y in x:
        print(test[0], y, test[0] == y, type(test[0]), type(y))

//Result
255 AAA False <class 'int'> <class 'numpy.str_'>
...

test[0] 和 y 在打印时看起来相同,但它们实际上是不同的类型,因此比较解析为 False。

当您将字符串列表附加到 numpy-array 时,numpy 确实将整个数组转换为 str 类型,包括整数以表示新数据。请参阅此链接作为参考 Python - Numpy 数组中的字符串和整数