Python 提取阵列中的向上/向下趋势

Python 提取阵列中的向上/向下趋势,python,arrays,trend,Python,Arrays,Trend,我有一个由不同日子的温度组成的数组。我的目标是提取温度在n天内升高或降低的元素 假设我们有一个由以下温度组成的数组 temp=[4,5,7,8,9,7,6,7,8,6,5,4,3,2] 如果我们假设n=3,那么如果温度连续升高了两天,但在第三天减少,我们不想提取该信息,只考虑在一个行中的最小温度N的温度HAV增加/减少的元素。 假设n=3,那么从上面的临时数组中提取 increasingTemp1=[4,5,7,8,9] ( i.e temp[0:5] ) increasingTemp2=[6

我有一个由不同日子的温度组成的数组。我的目标是提取温度在n天内升高或降低的元素

假设我们有一个由以下温度组成的数组

temp=[4,5,7,8,9,7,6,7,8,6,5,4,3,2]

如果我们假设n=3,那么如果温度连续升高了两天,但在第三天减少,我们不想提取该信息,只考虑在一个行中的最小温度N的温度HAV增加/减少的元素。 假设n=3,那么从上面的临时数组中提取

increasingTemp1=[4,5,7,8,9] ( i.e temp[0:5] )
increasingTemp2=[6,7,8]     ( i.e temp[6:9] )
decreasingTemp1=[9,7,6]     ( i.e temp[4:7] )
decreasingTemp2=[8,6,5,3,2] ( i.e temp[8:]  )
有没有办法做到这一点


谢谢

我猜这是一个典型的LeetCode数组问题。我将遍历数组一次,并为每个递增/递减数字序列建立子数组。如果趋势的方向发生变化,我将检查子阵列的长度是否至少为n,然后将子阵列添加到递增/递减阵列列表中

一个实现可以是这样的(O(n)时间和内存)


我希望这有帮助。如果您想确保实现是正确的,您可能需要创建和检查更多的测试用例

我已经在更多的测试用例上试用过了,到目前为止效果很好。感谢您花时间提供此解决方案
def return_arrays(arr,n):
    increasing = []
    decreasing = []
    new_arr = []
    for i,elem in enumerate(arr):
        if len(new_arr)>1:
            if new_arr[0]-new_arr[-1]>=0:
                # Decreasing
                if new_arr[-1]>=elem:
                    new_arr.append(elem)
                else:
                    if len(new_arr)>=n:
                        decreasing.append(new_arr)
                    new_arr = [new_arr[-1],elem]
            else:
                # Increasing
                if new_arr[-1]<=elem:
                    new_arr.append(elem)
                else:
                    if len(new_arr)>=n:
                        increasing.append(new_arr)
                    new_arr = [new_arr[-1],elem]
        else:
            new_arr.append(elem)
        if i==len(arr)-1:
            if len(new_arr)>=n:
                if new_arr[0]-new_arr[-1]>=0:
                    decreasing.append(new_arr)
                else:
                    increasing.append(new_arr)
    return increasing,decreasing 
temp = [4,5,7,8,9,7,6,7,8,6,5,4,3,2]
return_arrays(temp,3) # ([[4, 5, 7, 8, 9], [6, 7, 8]], [[9, 7, 6], [8, 6, 5, 4, 3, 2]])