【问题标题】:Compare items from two lists in Python在 Python 中比较两个列表中的项目
【发布时间】:2016-05-10 10:28:59
【问题描述】:

任务是检查两个列表中对应项目的最后 3 位数字是否相同。如果项目的长度小于 3,则检查它们是否是相同的数字。

如果两个列表的长度不同,则应返回 false,如果两个列表的长度均为 0,则应返回 true。

def corresponding_elements_have_same_end(list1, list2):

if len(list1) == len(list2):

    for i in range(0, len(list1)):

        num1 = str(list1[i])
        num2 = str(list2[i])

        if len(num1) <= 3 and len(num2) <= 3:
            return num1 == num2

        else:
            return num1[-3:] == num2[-3:]

else:
    return False

如果我运行它:

print("1.", corresponding_elements_have_same_end([3452, 43600, 10], [3111452, 600, 10]))
print("2.", corresponding_elements_have_same_end([452, 43600], [52, 600]))
print("3.", corresponding_elements_have_same_end([32, 43032], [32, 32]))
print("4.", corresponding_elements_have_same_end([32, 43132, 300], [32, 56132, 3300]))

打印出来

  1. 是的
  2. 错误
  3. 是的
  4. 是的

何时打印:

  1. 是的
  2. 错误
  3. 错误
  4. 是的

【问题讨论】:

  • 你应该考虑使用 mod, %,而不是 str。 num# = list#[i] % 1000.

标签: python list


【解决方案1】:

问题在于该函数总是只检查列表中的一项并立即返回,无论长度如何。当[32, 43032], [32, 32] 相互比较时,它会检查32 == 32 并立即返回True。如果您将第一个列表的顺序更改为 [42032, 32],您将得到 False

为了解决这个问题,需要修改循环,使其仅在数字不匹配的情况下返回。如果他们这样做,则应检查下一对数字。如果循环完成,那么您知道所有数字都匹配。这是一个例子:

for i in range(0, len(list1)):
    if str(list1[i])[-3:] != str(list2[i])[-3:]:
        return False

return True

请注意,您可以使用 zip 实现循环以使索引变得不必要:

for x, y in zip(list1, list2):
    if str(x)[-3:] != str(y)[-3:]:
        return False

【讨论】:

    【解决方案2】:
    def t(m,n):
        if False in map(lambda x,y:str(x)[-3:]==str(y)[-3:],m,n):
            return False
        return True
    

    【讨论】:

      【解决方案3】:

      也许这是您正在寻找的控制流:

      def corresponding_elements_have_same_end(list1, list2):
          if len(list1) == len(list2):
              for i in range(len(list1)):
                  num1, num2 = str(list1[i]), str(list2[i])
                  if len(num1) <= 3 and len(num2) <= 3 and num1 != num2:
                      return False
                  if num1[-3:] != num2[-3:]:
                      return False
              return True
          else:
              return False
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多