检查列表在python中是否按1升序

检查列表在python中是否按1升序,python,Python,我想检查我给定的列表是否按1升序 因此: [1,2,3,4]=正确 [1,3,4,5]=错误 如果可能的话,我想用一些特定于python的函数来实现它——所以不要用for-if组合来循环它,而是类似于all的东西。。。对于列表中的值 我希望这是清楚的这个怎么样 def的步长为: 对于x1,返回allx2-x1==1,在zipit[:-1]中返回x2,它[1:] >>>步长为[1,2,3,4] 符合事实的 >>>步长为[1,3,4,5] 错误的 这应该适用于任何集合,而不仅仅是列表 请记住,对于少

我想检查我给定的列表是否按1升序

因此:

[1,2,3,4]=正确 [1,3,4,5]=错误

如果可能的话,我想用一些特定于python的函数来实现它——所以不要用for-if组合来循环它,而是类似于all的东西。。。对于列表中的值

我希望这是清楚的

这个怎么样

def的步长为: 对于x1,返回allx2-x1==1,在zipit[:-1]中返回x2,它[1:] >>>步长为[1,2,3,4] 符合事实的 >>>步长为[1,3,4,5] 错误的 这应该适用于任何集合,而不仅仅是列表

请记住,对于少于两个元素的集合,这将返回True:

>>>有一个台阶[1] 符合事实的 >>>有一个步长[] 符合事实的 如果您不想这样做,则必须检查迭代器的长度

对于不支持getitem的泛型迭代器,与itertools.count相比可能是最好的方法,类似于:

进口itertools def的步长为: it=iterit 尝试: 第一个=下一个 除停止迭代外: 返回真值 对于x,返回allx==y,在zipit中返回y,itertools.countfirst+1 >>>我的步幅在10以内吗 符合事实的 这个怎么样

def的步长为: 对于x1,返回allx2-x1==1,在zipit[:-1]中返回x2,它[1:] >>>步长为[1,2,3,4] 符合事实的 >>>步长为[1,3,4,5] 错误的 这应该适用于任何集合,而不仅仅是列表

请记住,对于少于两个元素的集合,这将返回True:

>>>有一个台阶[1] 符合事实的 >>>有一个步长[] 符合事实的 如果您不想这样做,则必须检查迭代器的长度

对于不支持getitem的泛型迭代器,与itertools.count相比可能是最好的方法,类似于:

进口itertools def的步长为: it=iterit 尝试: 第一个=下一个 除停止迭代外: 返回真值 对于x,返回allx==y,在zipit中返回y,itertools.countfirst+1 >>>我的步幅在10以内吗 符合事实的 比较整个列表:

如果my_list==listrangemy_list[0],my_list[0]+lenmy_list 做事 或将列表本身与enumerate进行比较:

如果allentry-1==my_list[i-1]或i==0表示i,则枚举my_list中的条目 其中i==0检查第一次迭代,这始终是真的,因为一个简单的for循环将有lenmy_列表迭代,而我们只进行lenmy_列表-1比较。

比较整个列表:

如果my_list==listrangemy_list[0],my_list[0]+lenmy_list 做事 或将列表本身与enumerate进行比较:

如果allentry-1==my_list[i-1]或i==0表示i,则枚举my_list中的条目
其中i==0检查第一次迭代,这始终是真的,因为一个简单的for循环将有lenmy_列表迭代,而我们只进行lenmy_列表-1比较。

这不是一个单一的函数,但您可以使用以下方法:

lst = [1,2,3,4]
print(lst == list(range(lst[0],lst[-1]+1,1)))
True

lst = [1,3,4,5]
print(lst == list(range(lst[0],lst[-1]+1,1)))
False

它不是一个单一的功能,但您可以使用以下功能:

lst = [1,2,3,4]
print(lst == list(range(lst[0],lst[-1]+1,1)))
True

lst = [1,3,4,5]
print(lst == list(range(lst[0],lst[-1]+1,1)))
False
为什么不将其与范围进行比较

为什么不将其与范围进行比较


大多数其他答案都是通过创建一个新的列表来实现的,这需要时间和辅助空间。可以使用all、range和zip使用O1辅助空间来实现这一点。此解决方案也会短路,因此在最佳情况下需要O1时间

def正在上升LST: 特殊情况:空列表为升序 如果不是lst: 返回真值 start=lst[0] 结束=开始+lenlst 一般情况:升序列表等于一个范围 返回x的所有x==y,y在ziplst、rangestart和end中 测试:

>>>_在上升[1,2,3,4] 符合事实的 >>>_在上升[1,3,4,5] 错误的 >>>_在上升吗[23] 符合事实的
大多数其他答案都是通过创建一个新的列表来实现的,这需要时间和辅助空间。可以使用all、range和zip使用O1辅助空间来实现这一点。此解决方案也会短路,因此在最佳情况下需要O1时间

def正在上升LST: 特殊情况:空列表为升序 如果不是lst: 返回真值 start=lst[0] 结束=开始+lenlst 一般情况:升序列表等于一个范围 返回x的所有x==y,y在ziplst、rangestart和end中 测试:

>>>_在上升[1,2,3,4] 符合事实的 >>>_在上升[1,3,4,5] 错误的 >>>_在上升吗[23] 符合事实的
@kaya3的可能重复并不完全是重复,尽管这是另一个问题的特例。在我看来,有这个特定问题的人不应该被迫阅读一般问题好吧,我将把我的答案翻译成一个简化的形式。可能的@kaya3副本并不完全是副本,尽管这是另一个问题的特殊情况。在我看来,有这个特定问题的人不应该被迫阅读一般性的问题好吧,我将把我的答案翻译成一个简化的形式。12345只是一个例子-可以是123 124 125,但它们并不都有一个步长-所以它们在最后两种情况下是错误的,在第一种情况下是正确的?确定123是起始数字+1
=124+1=125哈哈哈,我以为你指的是3个单独的列表,分别是1,2,3,1,2,4和1,2,5。在本例中运行代码-l=[123,124,125]它给出True-这不是您想要的吗?12345只是一个示例-可以是123,124,125,但它们的步长都不是1-因此在最后两种情况下它们为false,在第一种情况下为True?当然123是起始数字+1=124+1=125哈哈哈,我以为你指的是3个单独的列表,分别是1,2,3,1,2,4和1,2,5。在这种情况下运行代码-l=[123,124,125]它给出的是真的-这不是您想要的吗?即使对于列表,itertools.islice也是一个更好的解决方案,因为常规的列表切片在内存中构造了一个新的列表。但它在一次性迭代器上不起作用。我将其替换为itertools.count,现在应该可以了。itertools.islice是一个更好的解决方案,即使对于列表也是如此,因为常规的列表切片在内存中构造了一个新的列表。但它在一次性迭代器上不起作用。我用itertools替换了它。伯爵,现在应该没事了。不完全正确;我的上一个解具有相同的性质;我的上一个解决方案具有相同的属性。