Python 单调序列中的索引问题

Python 单调序列中的索引问题,python,Python,我想检查数字列表是否单调(递增/递减),并返回布尔值列表。 不允许我使用高级工具,如:all、zip、np等。。。但我可以使用循环 我认为我的代码不起作用,因为I+1超出了列表末尾的范围 我该怎么办?我应该使用哪个索引?如何确保该条件适用于每个I 范围内i的(len(num_列表)): 如果(num_list[i]=num_list[i+1]):#减少 z=真 其他: z=假 列表=[y,z] 我试图仅在必要时更改函数的机制: def my_func(num_list): # 1-el

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

我认为我的代码不起作用,因为
I+1
超出了列表末尾的范围

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

范围内i的
(len(num_列表)):
如果(num_list[i]=num_list[i+1]):#减少
z=真
其他:
z=假
列表=[y,z]

我试图仅在必要时更改函数的机制:

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]

欢迎来到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")
myList=[1,2,3,8,17,29,30]
diffList=[]
递增值=False
对于范围内的i(len(myList)-1):
diffList.append(myList[i]-myList[i+1])
#打印(扩散列表)
向上=真
方向开关=错误

if(扩散列表[0]为什么我必须初始化z和y?如果你不将它们初始化为
True
,那么函数永远不能返回
True
;代码中没有其他地方将它们指定为
True
@tibetish Yes,否则你的函数将报告最后一对元素的非递减/非递增模式。元素-w按照您的建议,ise验证应该只允许y和z从真转换为假。为了直观地解释,如果您需要检查所有内容是否满足某个条件,那么当您逐个检查时,如果您看到一个不符合该条件,则您知道答案是
False
,但如果您看到一个通过了该条件,则然后,您不知道答案是
True
,因为可能有另一个失败。因此,仅检查一个元素就在循环中分配
True
在逻辑上是不正确的。
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")