首页 文章

比较Python中两个列表中的项目

提问于
浏览
0

任务是检查两个列表中相应项目的最后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]))

打印出来

真假真真

什么时候打印:

真假错真

3 回答

  • 1
    def t(m,n):
        if False in map(lambda x,y:str(x)[-3:]==str(y)[-3:],m,n):
            return False
        return True
    
  • 2

    问题是该函数总是只检查列表中的一个项目,无论长度如何都立即返回 . 当 [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
    
  • 0

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

    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
    

相关问题