我正在练习过去的纸质问题以修改下周的考试
我们说我有两个清单
a=[1,2,3,4]
b=[1,2,3,4]
并且变量n设置为值,即2 我需要创建一个函数来检查最后一个" n" list1和list2中的值相同,顺序相同。
使用for循环的一个变体和没有循环的变种
在这种情况下,它将返回true,因为3,4在列表1和2中是相同的
如果b = [1,2,4,3],则返回false
我没有循环的当前代码是:
def compare1(a,b,n):
if a[-n:]==b[-n:]:
return True
else:
return False
我相信当我测试时它会起作用
但是我如何将其转换为for循环呢?如果我添加:
def compare2(a,b,n):
for i in a and b:
if a[-n:]==b[-n:]:
return True
else:
return False
这可行,但for循环没有做任何事情
答案 0 :(得分:1)
有几种方法可以做到这一点。您可以遍历列表的索引,或者您可以将列表压缩在一起并直接在项目上循环。这里有一些例子。我还优化了您的compare1
功能。
def compare1(a, b, n):
return a[-n:] == b[-n:]
def compare2(a, b, n):
for i in range(-n, 0, 1):
if a[i] != b[i]:
return False
return True
def compare3(a, b, n):
for u, v in zip(a[-n:], b[-n:]):
if u != v:
return False
return True
def compare4(a, b, n):
return all(u == v for u, v in zip(a[-n:], b[-n:]))
# test
funcs = (compare1, compare2, compare3, compare4)
a = [1, 2, 3, 4]
b = [5, 6, 3, 4]
c = [1, 2, 5, 6]
for compare in funcs:
print(compare.__name__)
print(a, b, compare(a, b, 2))
print(a, c, compare(a, c, 2))
print()
<强>输出强>
compare1
[1, 2, 3, 4] [5, 6, 3, 4] True
[1, 2, 3, 4] [1, 2, 5, 6] False
compare2
[1, 2, 3, 4] [5, 6, 3, 4] True
[1, 2, 3, 4] [1, 2, 5, 6] False
compare3
[1, 2, 3, 4] [5, 6, 3, 4] True
[1, 2, 3, 4] [1, 2, 5, 6] False
compare4
[1, 2, 3, 4] [5, 6, 3, 4] True
[1, 2, 3, 4] [1, 2, 5, 6] False
FWIW,compare1
是最好的方法,因为它完成了所有的循环和放大。在C级进行测试而不是使用显式Python代码。
答案 1 :(得分:0)
没有循环
def compare1(a,b,n):
return a[-n:] == b[-n:]
有循环
您需要从最后一次迭代到nth
def compare2(a,b,c):
for i in xrange(1,c + 1):
if a[-i] != b[-i]:
return False
return True