繁体   English   中英

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

[英]Compare items from two lists in Python

任务是检查两个列表中对应项目的后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. 真正

什么时候应该打印:

  1. 真正
  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
def t(m,n):
    if False in map(lambda x,y:str(x)[-3:]==str(y)[-3:],m,n):
        return False
    return True

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM