0

刚刚编写了一个文件比较程序,就遇到了这个问题。我什至无法理解为什么会这样。我尽我所能去谷歌搜索这个问题,但这有点难。当此代码运行时:

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

filehashes并且inphashes都是str 列表(即[['honk','donk'],['bonk','ponk']])的列表。

虽然这是 和 的预期filehashes[a][1]内容inphashes[b][1]。它们显然实际上并不相等('ee...' != 'ef...')。到底是什么导致了这种情况,我该如何解决?

4

2 回答 2

1

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

于 2013-11-11T13:57:05.487 回答
1

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

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

注意名称,您在这里索引到相同的结构。如果a == b保证甚至可以比较同一个对象,但对于任何重复的哈希值都是 True 。

也许您的意思是:

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

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

for fhash, inphash in zip(filehashes, inpuhashes):
    if fhash[1] == inphash[1]:
        print('{} == {}'.format(fhash[1], inphash[1]))
    else:
        print('Inconsistency error')
于 2013-11-11T13:58:20.820 回答