任务是检查两个列表中相应项目的最后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]))
打印出来
- 真
- 假
- 真
- 真
醇>
何时打印:
- 真
- 假
- 假
- 真
醇>
答案 0 :(得分: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
答案 1 :(得分: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 :(得分: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