我试图用Python编写一个函数,检查给定的整数列表是否严格交替,i.e.alternately是否严格上下交替。
例如:
alternating([]) = True
alternating([1,3,2,3,1,5]) = True
alternating([3,2,2,1,5])= False
alternating([3,2,1,3,5]) = False这是我所能想到的代码,但它并不适用于空列表,对其余的代码确实有效,而我所做的任何更改都会给我带来所有其余的错误。
def alternating(list):
for i in range(1,len(list)):
if (((list[i]>list[i+1]) and (list[i]>list[i-1])) or ((list[i] <list[i+1]) and (list[i]<list[i-1]))) :
return True
else:
return False发布于 2016-08-16 08:13:50
我会这样做:
def alternating(l):
return all(cmp(a, b)*cmp(b, c) == -1 for a, b, c in zip(l, l[1:], l[2:]))
assert alternating([]) is True
assert alternating([1, 3, 2, 3, 1, 5]) is True
assert alternating([3, 2, 2, 1, 5]) is False
assert alternating([3, 2, 1, 3, 5]) is False
assert alternating([1, 3, 2, 3, 2, 1]) is False以下是两个更简单的版本:
def alternating(l):
for i in range(len(l)-2):
if (l[i] < l[i+1]) and (l[i+1] > l[i+2]):
continue
if (l[i] > l[i+1]) and (l[i+1] < l[i+2]):
continue
return False
return Truedef alternating(l):
for i in range(len(l)-2):
if (l[i] < l[i+1]) and (l[i+1] < l[i+2]):
return False
if (l[i] > l[i+1]) and (l[i+1] > l[i+2]):
return False
if (l[i] == l[i+1]) or (l[i+1] == l[i+2]):
return False
return True发布于 2016-08-16 08:22:56
下面是一个简单的方法:
def alternating(l):
for i in range(1, len(l) - 1):
if not (l[i - 1] < l[i] > l[i + 1] or
l[i - 1] > l[i] < l[i + 1]):
return False
return True
print alternating([])
print alternating([1,3,2,3,1,5])
print alternating([3,2,2,1,5])
print alternating([3,2,1,3,5])发布于 2016-08-16 08:18:49
基本错误#1:
for i in range(1,len(list)):
if (((list[i]>list[i+1]) and (list[i]>list[i-1])) or ...:
return True在算法透视图中,您不可能通过只检查n元素来确定n元素的列表是交替的。
基本错误2:
您的函数并不总是返回值。虽然这在Python中不是强制性的,但在您的具体情况下,您可能希望它返回一个值,甚至返回一个布尔值。
https://stackoverflow.com/questions/38969629
复制相似问题