具有升序降序的山谷的python函数

Posted

技术标签:

【中文标题】具有升序降序的山谷的python函数【英文标题】:python function for valley with ascending descending 【发布时间】:2018-01-20 17:26:02 【问题描述】:

如果一个整数列表由一系列严格递减的值和一系列严格递增的值组成,则称该列表为谷。递减序列和递增序列的长度必须至少为 2。递减序列的最后一个值是递增序列的第一个值。

【问题讨论】:

你到底想要什么?这是作业吗? 【参考方案1】:
def valley(list):
  if(len(list)==0):
    return(True)
  if(len(list)==1):
    return(False)
  if(list[0]<list[1]):
    return(False)
  for i in range(0,len(list)-1):
    if(list[i]<list[i+1]):
      pos=i
      break
    if(list[i]==list[i+1]):
      return(False) 
  else:
    return(False)
  for i in range(pos,len(list)-1):
    if(list[i]>=list[i+1]):
      return(False)
  return(True)

【讨论】:

【参考方案2】:
def valley(l):
if len(l) < 4:
    return False
else:
    for i in range(0,l.index(min(l))):
        if l[i] > l[i+1]:
            i+=1
        else: return False

    for j in range(l.index(min(l)),len(l)-1):
        if l[j] < l[j+1]:
            j+=1
        else: return False

    if i==l.index(min(l)) and j==len(l)-1:
        return True
    else: return False

【讨论】:

【参考方案3】:
def valley(list):
if (len(list) < 3):
    return False
ucount = 1
lcount = 1
for i in range(0, len(list) - 1):
    if list[i] > list[i + 1]:
        if lcount > 1:
            return False
        ucount = ucount + 1
    if list[i] < list[i + 1]:
        lcount = lcount + 1
    if list[i] == list[i + 1]:
        return False
if ucount >1 and lcount > 1:
    return True
else:
    return False

这个代码对我有用。

【讨论】:

【参考方案4】:

我认为一个更好的答案会结合上面的一些答案来给出一个非常精简的代码,如下所示。

def valley(l):
  if(len(l)<3):
    return(False)
  for i in range(0,len(l)-1):
    if(l[i]<l[i+1]):
      for i in range(i,len(l)-1):
        if(l[i]>=l[i+1]):
          return(False)
      return(True)
    elif(l[i]==l[i+1]):
      return(False) 
    else:
      return(False)

【讨论】:

以上是关于具有升序降序的山谷的python函数的主要内容,如果未能解决你的问题,请参考以下文章

深入理解python中的排序sort

Mysql——实现按字段部分升序,部分降序的方法

Java实现数组降序的方法

python:argsort,将数组升序或降序,将矩阵每一行升序或降序,返回其索引

python生成20个随机数列表,前10个升序后10个降序

python第十四课--排序及自定义函数