数组递增的判断【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)
学三境:
一境:昨夜西风凋碧树,独上高楼,望尽天涯路;
二境:衣带渐宽终不悔,为伊消得人憔悴;
三境:众里寻‘它’千百度,蓦然回首,那斯却在,灯火阑珊处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY