在单调序列中建立索引的问题

时间:2019-11-16 15:40:20

标签: python

我想检查数字列表是否单调(递增/递减),并返回布尔值列表。 我 不允许 使用高级工具,例如: all zip np ,等等...但是我可以使用循环。

我认为我的代码无法正常工作,因为i + 1在列表末尾超出范围。

我该怎么办?我应该使用哪个索引?如何确定条件适用于每个i

for i in range(len(num_list)):
    if (num_list[i] <= num_list[i+1]):  # strictly
        y = True
    else:
        y = False

    if (num_list[i] >= num_list[i+1]):  # decreasing
        z = True
    else:
        z = False

    list = [y,z]

2 个答案:

答案 0 :(得分:1)

我尝试仅在必要时更改您的功能机制:

responseStorage

测试:

def my_func(num_list):

    # 1-element list needs separate treatment
    if len(num_list)==1:
        return [True, True]

    # here you should init y and z
    # at the beginning you assume num_list is non-decreasing
    y = True
    # at the beginning you assume num_list is non-increasing
    z = True

    # now you check for all but the last element whether y and z maintain
    for i in range(len(num_list)-1):

        # verify need to change y
        # is num_list indeed non-decreasing?
        if (num_list[i] <= num_list[i+1]):
            pass
        else:
            y = False

        # verify need to change z
        # is num_list indeed non-increasing?
        if (num_list[i] >= num_list[i+1]):
            pass
        else:
            z = False

    return [y,z]

答案 1 :(得分:0)

欢迎来到SO社区。

一种找出数字是递增还是递减的方法是找出相邻数字之间的差异,这是一种找到数字差异的粗略方法。这是我的代码,它找到列表中数字之间的差异,然后找出数字是增加还是减少。

myList=[1,2,3,8,17,29,30]
diffList=[]
increasingValue=False
for i in range(len(myList)-1):
    diffList.append(myList[i]-myList[i+1])
#print(diffList)

upDirection=True
directionSwitch=False
if(diffList[0]<0):
    upDirection=False

for item in diffList:

    if(item<0 and upDirection==True):
        directionSwitch=True

    if(item>0 and upDirection==False):
        directionSwitch=True

if(directionSwitch):
    print("Non Monotonic")