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

时间:2013-11-11 13:51:43

标签: python string list if-statement compare

只是对文件比较程序进行编码,并遇到了这个问题。我甚至无法理解为什么会这样。我尽力去谷歌搜索问题,但这有点困难。当此代码运行时:

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都是列表的列表(即[['honk','donk'],['bonk','ponk']])。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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')