数组递增的判断【python实现】
有时候需要对某一组数组的数据进行判断是否 递增 的场景,比如我在开发一些体育动作场景下,某些肢体动作是需要持续朝着垂直方向向上变化,那么z轴的值是会累增的。同理,逆向考虑,递减就是它的对立面。
下面是查找总结到的所有方式,如有补充可以评论区提出。
资料参考来源: Check if list is strictly increasing
1. zip() and all()
- Code:
test_list = [1, 4, 5, 7, 8, 10]
# Using zip() and all() to
# Check for strictly increasing list
res = all(i < j for i, j in zip(test_list, test_list[1:]))
print(f"Is list strictly increasing ? : {res}")
- Output:
Is list strictly increasing ? : True
时间复杂度: O(n), n是数组的长度。
2. reduce and lambda
- Code:
import functools
test_list = [1, 4, 5, 7, 8, 10]
res = bool((lambda list_demo: functools.reduce(lambda i, j: j if
i < j else 9999, list_demo) != 9999)(test_list))
print(f"Is list strictly increasing ? : {res}")
- Output:
Is list strictly increasing ? : True
时间复杂度: O(n), n是数组的长度。
3. itertools.starmap() + zip() + all()
- Code:
import itertools
test_list = [1, 4, 5, 7, 8, 10]
res = all(itertools.starmap(operator.le, zip(test_list, test_list[1:])))
print(f"Is list strictly increasing ? : {res}")
- Output:
Is list strictly increasing ? : True
时间复杂度: O(n), n是数组的长度。
4. sort() and extend()
- Code:
test_list = [1, 4, 5, 7, 8, 10]
res = False
new_list = []
new_list.extend(test_list)
test_list.sort()
if new_list == test_list:
res = True
print(f"Is list strictly increasing ? : {res}")
- Output:
Is list strictly increasing ? : True
时间复杂度: O(nlogn), 这里是sort()的时间复杂度
5. Use stacks
栈是一种后进先出的数据结构(Last in, first out)。
- Code:
def is_strictly_increasing(lst):
stack = []
for i in lst:
if stack and i <= stack[-1]:
return False
stack.append(i)
return True
test_list = [1, 4, 5, 7, 8, 10]
print(is_strictly_increasing(test_list)) # True
test_list = [1, 4, 5, 7, 7, 10]
print(is_strictly_increasing(test_list)) # False
时间复杂度: O(n),原数组被遍历了一遍
空间复杂度: O(n),栈可能要存储全部的n个原数组元素
6. numpy()
- Code:
import numpy as np
def is_increasing(lst):
# Converting input list to a numpy array
arr = np.array(lst)
# calculate the difference between adjacent elements of the array
diff = np.diff(arr)
# check if all differences are positive
# using the np.all() function
is_increasing = np.all(diff > 0)
# return the result
return is_increasing
# Input list
test_list = [1, 4, 5, 7, 8, 10]
# Printing original lists
print("Original list : " + str(test_list))
result = is_increasing(test_list)
print(result)
# True
时间复杂度: O(n)
7. itertools.pairwise() and all()
这里面就等于使用 pairwise() 替代了之前的 zip(list, list[1:]) 。
- Code:
from itertools import pairwise
# Function
def is_strictly_increasing(my_list):
# using pairwise method to iterate through the list and
# create pairs of adjacent elements.
# all() method checks if all pairs of adjacent elements
# satisfy the condition i < j, where i and j
# are the two elements in the pair.
if all(a < b for a, b in pairwise(my_list)):
return True
else:
return False
# Initializing list
test_list = [1, 4, 5, 7, 8, 10]
# Printing original lists
print("Original list : " + str(test_list))
# Checking for strictly increasing list
# using itertools pairwise() and all() method
res = is_strictly_increasing(test_list)
# Printing the result
print("Is list strictly increasing ? : " + str(res))
- Output:
Original list : [1, 4, 5, 7, 8, 10]
Is list strictly increasing ? : True
时间复杂度: O(n)
数组递增的判断【python实现】的更多相关文章
- 刷题3:给定一个数组 nums,判断 nums 中是否存在三个下标 a,b,c数相加等于targe且a,b,c不相等
题目: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,下标 ,a ,b , c 对应数相加等于 targe 找出所有满足条件且不重复的三元组下标 解析: ...
- 字符数组和string判断是否为空行 NULL和0 namespace变量需要自己进行初始化
string 可以这样判断空行input !="" 字符数组可以通过判断第一个元素是否为空字符'\0',是的话为空行arrar[0]=='\0':或者用长度strlen(char ...
- 判断python对象是否可调用的三种方式及其区别
查找资料,基本上判断python对象是否为可调用的函数,有三种方法 使用内置的callable函数 callable(func) 用于检查对象是否可调用,返回True也可能调用失败,但是返回False ...
- (016)给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树(keep it up)
给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树. 因为数组是递增有序的.每次都在中间创建结点,类似二分查找的方法来间最小树. struct TreeNode { int data; Tr ...
- 【剑指Offer】构建乘积数组 解题报告(Python)
[剑指Offer]构建乘积数组 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...
- Python学习笔记_二维数组的查找判断
在进行数据处理的工作中,有时只是通过一维的list和有一个Key,一个value组成的字典,仍无法满足使用,比如,有三列.或四列,个数由不太多. 举一个现实应用场景:学号.姓名.手机号,可以再加元素 ...
- 二维数组中的查找(python)
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的
题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...
- 在Python脚本中判断Python的版本
引自:http://segmentfault.com/q/1010000000127878 如果是给人读,用 sys.version,如果是给机器比较,用 sys.version_info,如果是判断 ...
- 旋转数组的最小数字(python)
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...
随机推荐
- Util应用框架基础(五) - 异常处理
本节介绍Util应用框架如何处理系统错误. 概述 系统在运行过程中可能发生错误. 系统错误可以简单分为两类: 系统异常 系统本身出现的错误. 业务异常 不满足业务规则出现的错误. 如何处理系统异常 如 ...
- C++跨DLL内存所有权问题探幽(二)CRT中MT和MD混用导致的堆损坏
0xC0000374: 堆已损坏. (参数: 0x00007FFA1E9787F0). _Mem 是 nullptr 我在开发的过程中有遇到上面两个东西的bug,百思不得其解,最后才发现这个和两个DL ...
- Git如何回到拉取之前的代码
1.执行git reflog命令查看你的历史变更记录: 2.git reset --hard 2aee3f(拉代码之前的提交记录) Git基础命令总结请参考:https://blog.csdn.net ...
- 聊一聊 .NET高级调试 中的一些内存术语
一:背景 1. 讲故事 在高级调试的旅程中,经常会有一些朋友问我什么是 工作集(内存),什么是 提交大小,什么是 Virtual Size, 什么是 Working Set ...截图如下: 既然有很 ...
- 在net中通过Autofac实现AOP的方法及实例详解
在本示例中,我们将使用Autofac和AspectC(Autofac.Extras.DynamicProxy2)来演示如何实现AOP(面向切面编程).我们将创建一个简单的C#控制台应用程序,并应用AO ...
- 关于win11系统修改用户名导致登录进入不了系统的坑
背景:公司的新电脑,win11系统,开机进入需要注册用户名和密码,在取用户名的时候,手快没注意取了一个中文名,结果这给我后面的工作带来了一个坑,我在用mysqlworkbench进行数据备份,需要对数 ...
- [USACO2007FEB S] The Cow Lexicon S
题目描述 Few know that the cows have their own dictionary with W (1 ≤ W ≤ 600) words, each containing no ...
- SpringBoot项目整合微信登录
一.开通微信登录 去微信开发者平台 1.注册 2.邮箱激活 3.完善开发者资料 4.开发者资质认证 准备营业执照,1-2个工作日审批.300元 5.创建网站应用 6.提交审核,7个工作日审批 7.熟悉 ...
- 基于python的cat1模块的AT指令串口通信解析
一 前记 使用cat1模块做产品的过程中,遇到了不少问题.其中很重要的一个就是怎么测试单个模块的好坏.这里笔者专门写了一个工具,来测试cat1模块的是否好用,这里做一个分享吧. 二 源码解析 这个 ...
- Net 高级调试之十五:经典的锁故障
一.简介 今天是<Net 高级调试>的第十五篇文章,这个系列的文章也快结束了,但是我们深入学习的脚步还不能停止.上一篇文件我们介绍了C# 中一些锁的实现逻辑,并做到了眼见为实的演示给大家它 ...