有时候需要对某一组数组的数据进行判断是否 递增 的场景,比如我在开发一些体育动作场景下,某些肢体动作是需要持续朝着垂直方向向上变化,那么z轴的值是会累增的。同理,逆向考虑,递减就是它的对立面。

下面是查找总结到的所有方式,如有补充可以评论区提出。

资料参考来源: Check if list is strictly increasing

1. zip() and all()

  • Code:
  1. test_list = [1, 4, 5, 7, 8, 10]
  2. # Using zip() and all() to
  3. # Check for strictly increasing list
  4. res = all(i < j for i, j in zip(test_list, test_list[1:]))
  5. print(f"Is list strictly increasing ? : {res}")
  • Output:
  1. Is list strictly increasing ? : True

时间复杂度: O(n), n是数组的长度。

2. reduce and lambda

  • Code:
  1. import functools
  2. test_list = [1, 4, 5, 7, 8, 10]
  3. res = bool((lambda list_demo: functools.reduce(lambda i, j: j if
  4. i < j else 9999, list_demo) != 9999)(test_list))
  5. print(f"Is list strictly increasing ? : {res}")
  • Output:
  1. Is list strictly increasing ? : True

时间复杂度: O(n), n是数组的长度。

3. itertools.starmap() + zip() + all()

  • Code:
  1. import itertools
  2. test_list = [1, 4, 5, 7, 8, 10]
  3. res = all(itertools.starmap(operator.le, zip(test_list, test_list[1:])))
  4. print(f"Is list strictly increasing ? : {res}")
  • Output:
  1. Is list strictly increasing ? : True

时间复杂度: O(n), n是数组的长度。

4. sort() and extend()

  • Code:
  1. test_list = [1, 4, 5, 7, 8, 10]
  2. res = False
  3. new_list = []
  4. new_list.extend(test_list)
  5. test_list.sort()
  6. if new_list == test_list:
  7. res = True
  8. print(f"Is list strictly increasing ? : {res}")
  • Output:
  1. Is list strictly increasing ? : True

时间复杂度: O(nlogn), 这里是sort()的时间复杂度

5. Use stacks

栈是一种后进先出的数据结构(Last in, first out)。

  • Code:
  1. def is_strictly_increasing(lst):
  2. stack = []
  3. for i in lst:
  4. if stack and i <= stack[-1]:
  5. return False
  6. stack.append(i)
  7. return True
  8. test_list = [1, 4, 5, 7, 8, 10]
  9. print(is_strictly_increasing(test_list)) # True
  10. test_list = [1, 4, 5, 7, 7, 10]
  11. print(is_strictly_increasing(test_list)) # False

时间复杂度: O(n),原数组被遍历了一遍

空间复杂度: O(n),栈可能要存储全部的n个原数组元素

6. numpy()

  • Code:
  1. import numpy as np
  2. def is_increasing(lst):
  3. # Converting input list to a numpy array
  4. arr = np.array(lst)
  5. # calculate the difference between adjacent elements of the array
  6. diff = np.diff(arr)
  7. # check if all differences are positive
  8. # using the np.all() function
  9. is_increasing = np.all(diff > 0)
  10. # return the result
  11. return is_increasing
  12. # Input list
  13. test_list = [1, 4, 5, 7, 8, 10]
  14. # Printing original lists
  15. print("Original list : " + str(test_list))
  16. result = is_increasing(test_list)
  17. print(result)
  18. # True

时间复杂度: O(n)

7. itertools.pairwise() and all()

这里面就等于使用 pairwise() 替代了之前的 zip(list, list[1:])

  • Code:
  1. from itertools import pairwise
  2. # Function
  3. def is_strictly_increasing(my_list):
  4. # using pairwise method to iterate through the list and
  5. # create pairs of adjacent elements.
  6. # all() method checks if all pairs of adjacent elements
  7. # satisfy the condition i < j, where i and j
  8. # are the two elements in the pair.
  9. if all(a < b for a, b in pairwise(my_list)):
  10. return True
  11. else:
  12. return False
  13. # Initializing list
  14. test_list = [1, 4, 5, 7, 8, 10]
  15. # Printing original lists
  16. print("Original list : " + str(test_list))
  17. # Checking for strictly increasing list
  18. # using itertools pairwise() and all() method
  19. res = is_strictly_increasing(test_list)
  20. # Printing the result
  21. print("Is list strictly increasing ? : " + str(res))
  • Output:
  1. Original list : [1, 4, 5, 7, 8, 10]
  2. Is list strictly increasing ? : True

时间复杂度: O(n)

数组递增的判断【python实现】的更多相关文章

  1. 刷题3:给定一个数组 nums,判断 nums 中是否存在三个下标 a,b,c数相加等于targe且a,b,c不相等

    题目: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,下标 ,a ,b , c 对应数相加等于 targe 找出所有满足条件且不重复的三元组下标 解析: ...

  2. 字符数组和string判断是否为空行 NULL和0 namespace变量需要自己进行初始化

    string 可以这样判断空行input !="" 字符数组可以通过判断第一个元素是否为空字符'\0',是的话为空行arrar[0]=='\0':或者用长度strlen(char ...

  3. 判断python对象是否可调用的三种方式及其区别

    查找资料,基本上判断python对象是否为可调用的函数,有三种方法 使用内置的callable函数 callable(func) 用于检查对象是否可调用,返回True也可能调用失败,但是返回False ...

  4. (016)给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树(keep it up)

    给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树. 因为数组是递增有序的.每次都在中间创建结点,类似二分查找的方法来间最小树. struct TreeNode { int data; Tr ...

  5. 【剑指Offer】构建乘积数组 解题报告(Python)

    [剑指Offer]构建乘积数组 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...

  6. Python学习笔记_二维数组的查找判断

    在进行数据处理的工作中,有时只是通过一维的list和有一个Key,一个value组成的字典,仍无法满足使用,比如,有三列.或四列,个数由不太多. 举一个现实应用场景:学号.姓名.手机号,可以再加元素 ...

  7. 二维数组中的查找(python)

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  8. js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

    题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...

  9. 在Python脚本中判断Python的版本

    引自:http://segmentfault.com/q/1010000000127878 如果是给人读,用 sys.version,如果是给机器比较,用 sys.version_info,如果是判断 ...

  10. 旋转数组的最小数字(python)

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...

随机推荐

  1. Vue源码学习(十五):diff算法(二)交叉比对(双指针)

    好家伙, 本节来解决我们上一章留下来的问题, 新旧节点同时有儿子的情况本章继续解决 1.要做什么? 本章将解决, 1.在相同tag下子元素的替换问题 2.使用双指针进行元素替换, 实现效果如下:   ...

  2. Qt+FFmpeg播放mp4文件视频

    关键词:Qt FFmpeg C++ MP4 视频 源码下载在系列原文地址. 先看效果. 这是一个很简单的mp4文件播放demo,为了简化,没有加入音频数据解析,即只有图像没有声音. 音视频源的播放可以 ...

  3. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-29-处理日历时间控件-中篇

    1.简介 上一篇的日历时间控件宏哥介绍的比较传统也是很常见的.宏哥不能说它很low,但是相比较一些高端.大气.上档次的日历时间控件,结果就一目了然了:确实很low. 2.被测网站 2.1高大上日历时间 ...

  4. .NET8 Blazor的Auto渲染模式的初体验

    .NET8发布后,Blazor支持四种渲染方式 静态渲染,这种页面只可显示,不提供交互,可用于网页内容展示 使用Blazor Server托管的通过Server交互方式 使用WebAssembly托管 ...

  5. 聊聊分布式 SQL 数据库Doris(八)

    稀疏索引 密集索引:文件中的每个搜索码值都对应一个索引值,就是叶子节点保存了整行. 稀疏索引:文件只为索引码的某些值建立索引项. 稀疏索引的创建过程包括将集合中的元素分段,并给每个分段中的最小元素创建 ...

  6. 百度API学习 | day01

    大作业:(2023.12.27日完成) 各位同学可根据自身情况进行选择: 选项一:根据实验一.二.三完成如下任务: 任务一:基于Jfinal构建信息管理系统,要求包含用户管理,翻译业务模块管理,图片优 ...

  7. [ABC268G] Random Student ID

    Problem Statement Takahashi Elementary School has $N$ new students. For $i = 1, 2, \ldots, N$, the n ...

  8. [ABC246F] typewriter

    Problem Statement We have a typewriter with $N$ rows. The keys in the $i$-th row from the top can ty ...

  9. .NET中如何实现高精度定时器

    .NET中有多少种定时器一文介绍过.NET中至少有6种定时器,但精度都不是特别高,一般在15ms~55ms之间.在一些特殊场景,可能需要高精度的定时器,这就需要我们自己实现了.本文将讨论高精度定时器实 ...

  10. SpringBoot对象拷贝

    目录 概述 定义实体类 Car size carInfo 造测试数据 Spring BeanUtils Apache BeanUtils Cglib BeanCopier MapStruct 性能测试 ...