只是编写文件比较程序,并遇到了这个问题。我什至无法理解为什么会发生这种情况。我尽力在谷歌上搜索这个问题,但这有点困难。当此代码运行时:
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...'
)。到底是什么导致了这种情况,我该如何解决?
你不是在比较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')
if 条件是 filehashes[a][1] ==
文件哈希[b][1]
而打印行是 print(filehashes[a][1] + ' == ' +
inphashes [b][1]
)。请注意差异。我不清楚你在问什么。我认为这回答了这个问题。如果没有,请对此发表评论,然后我将删除此答案。