Python:比较列表中的元素似乎返回了错误的结果

2024-03-28 22:54:49 发布

您现在位置:Python中文网/ 问答频道 /正文

刚刚编写了一个文件比较程序,就遇到了这个问题。我甚至不能理解为什么会这样。我尽了最大努力在谷歌上搜索这个问题,但有点难。运行此代码时:

while a < len(filehashes) and b < len(inphashes):
    if filehashes[a][1] == filehashes[b][1]:
        print(filehashes[a][1] + ' == ' + inphashes[b][1])
        a += 1
        b += 1
    else:
        print('Inconsistency error')

我得到这个输出:

ee53f15519619c51f205553c828e7546 == ef53f15519619c51f205553c828e7546

filehashesinphashes都是str列表(即[['honk','donk'],['bonk','ponk']])。你知道吗

这是filehashes[a][1]inphashes[b][1]的预期内容。很明显,它们实际上并不相等('ee...' != 'ef...')。究竟是什么原因造成的,我该如何解决?你知道吗


Tags: and文件代码程序leniferrorelse
2条回答

if条件是filehashes[a][1] ==filehashes[b][1],而打印行是print(filehashes[a][1] + ' == ' +inhashes[b][1])。注意区别。我不清楚你在问什么。我想这就是答案。如果没有,请对此发表评论,然后我将删除此答案。你知道吗

你不是在比较filehashes[a][1] == inphashes[b][1]。您正在比较:

if filehashes[a][1] == filehashes[b][1]:

注意这些名称,在这里索引到相同的结构中。如果a == b,则可以保证对同一对象进行比较,但对于任何重复的哈希值都是如此。你知道吗

或许你的意思是:

if filehashes[a][1] == inphashes[b][1]:

如果您所做的只是同时增加ab,并且它们保持相等,那么您也可以在这里使用zip

for fhash, inphash in zip(filehashes, inpuhashes):
    if fhash[1] == inphash[1]:
        print('{} == {}'.format(fhash[1], inphash[1]))
    else:
        print('Inconsistency error')

相关问题 更多 >