python - 如何查找和打印趋势点变化

标签 python arrays python-3.x arraylist

我正在研究的逻辑:

我正在尝试打印出变化点的结果。

趋势变化点是数组改变方向并从升序变为降序或从降序变为升序的那些点。

我应该得到:11 8 5 10 但我只得到了其中的一部分。 **我的方法是正确的方法吗?*

numberss = [1,4,9,11,8,3,2,5,10]
trendpoints(numberss,len(numberss))

def trendpoints(number_array, length):
    print("length", length)
    print(number_array)
    # -1 on the array because we dont need to jump to the last number (fake fix)
    for num in range(1, length-1):
        # check last, current and next
        # if current greater then current and less then next
        # [1,4,9,11,8,3,2,5,10]
        # 11 hit 8 CHANGE UP print both
        if num <= length:
            #print(number_array[num-1])
            #print(number_array[num])
            #print(number_array[num+1])

            # 9 11 8
            # 11 > 9
            # 11 < 8

            # 2 5 10
            # 2 < 5
            # 10 > 5
            if ((number_array[num] > number_array[num-1] and number_array[num] > number_array[num+1])
                or (number_array[num] < number_array[num-1] and number_array[num] > number_array[num+1])):
                #print("CHANGE")
                print(number_array[num])
                #print(number_array[num+1])
            print("---")

我的结果:

length 9
[1, 4, 9, 11, 8, 3, 2, 5, 10]
---
---
11
---
8
---
3
---
---
---

最佳答案

如评论中所述,11 和 2 是唯一预期的解决方案。这是一个使用列表理解的简短解决方案:(假设没有重复数字)

def trendpoints(number_array, length):
    diff_array = [number_array[i] - number_array[i - 1] for i in range(1, length)]
    trend_array = [number_array[i] for i in range(1, length - 1) if diff_array[i] * diff_array[i - 1] <= 0]
    return trend_array

关于python - 如何查找和打印趋势点变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57811470/

相关文章:

arrays - 如何在 Go 中跨多个数组检查变量

python-3.x - 如何识别200多个数值变量中的类别变量?

mysql - python3计算自上次mysql数据输入以来的分钟数

django - 找出 Django 代码在哪个用户下运行

python - 用 Python 编写书籍类

Java从字节数组中获取字符串

python - Keras 澄清隐藏层的定义

C# 简化字符串数组初始化

python - pathlib路径中斜杠运算符和逗号分隔符的区别

python - 将 flask 打开到更多端口