在python中,我试图检查给定的值列表当前是否按递增顺序排序,以及列表中是否存在相邻的重复项。如果有,代码应该返回True。我不确定为什么这段代码不起作用。有任何想法吗?提前致谢!!
def main():
values = [1, 4, 9, 16, 25]
print("Return true if list is currently sorted in increasing order: ", increasingorder(values))
print("Return true if list contains two adjacent duplicate elements: ", twoadjacentduplicates(values))
def increasingorder(values):
hlist = values
a = hlist.sort()
if a == hlist:
return True
else:
return False
def twoadjacentduplicates(values):
ilist = values
true = 0
for i in range(1, len(ilist)-1):
if ilist[i] == ilist[i - 1] or ilist[i] == ilist[i + 1] :
true = true + 1
if true == 0:
return False
if true > 0:
return True
main()
答案 0 :(得分:1)
您的increasingorder
函数几乎肯定不会起作用,因为Python使用引用,sort
函数就地修改列表并返回None
。这意味着,在您致电a = hlist.sort()
后,hlist
将被排序,a
将为None
。所以他们不会比较平等。
您可能打算执行以下操作,这将返回已排序的列表。
a = sorted(hlist)
此功能有效:
def increasingorder(values):
hlist = values
a = sorted(hlist)
if a == hlist:
return True
else:
return False
您当然可以将其简化为一行。
def increasingorder(values):
return sorted(values) == values
您的第二个功能看起来在逻辑上是正确的,但可以简化为以下内容。
def twoadjacentduplicates(values):
for i in range(0, len(values)-1):
if values[i] == values[i + 1] :
return True
return False
答案 1 :(得分:0)
尝试为列表作为参数完成的每个值检查操作创建一个True False函数。然后调用每个函数,如"如果1和2打印3"格式。这可能会使思考流程变得容易一些。
这是你想要的吗?
def isincreasing(values):
if values==sorted(values):
return True
return False
def has2adjdup(values):
for x in range(len(values)-1):
if values[x]==values[x+1]:
return True
return False
if isincreasing(values) and has2adjdup(values):
print "True"