按递增顺序和相邻值排序值

时间:2014-04-19 20:31:08

标签: python

在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()

2 个答案:

答案 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"