【问题标题】:Python: Comparing elements of a list within a list appears to be returning wronglyPython:比较列表中列表的元素似乎返回错误
【发布时间】:2013-11-11 13:51:42
【问题描述】:

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

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...')。到底是什么原因造成的,我该如何解决?

【问题讨论】:

    标签: python string list if-statement compare


    【解决方案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')
    

    【讨论】:

    • 你说的完全正确,我认为自己是最笨的笨蛋。虽然我确定我已经检查了 100 次,但我很抱歉浪费了你们俩的时间。了解 zip 至少很有趣。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2023-04-03
      相关资源
      最近更新 更多