我想检查给定列表是否按1升序排列
所以:
[1,2,3,4] = True
[1,3,4,5] = False
并且如果可能的话我想用一些python特定的功能来做-所以不要用for if组合来循环它,而是像all(... for list中的值)
我希望这很清楚
这个怎么样?
def has_stepsize_one(it):
return all(x2 - x1 == 1 for x1, x2 in zip(it[:-1], it[1:]))
>>> has_stepsize_one([1,2,3,4])
True
>>> has_stepsize_one([1,3,4,5])
False
这应该适用于任何集合,而不仅仅是列表。
请记住,这将返回True
少于两个元素的集合:
>>> has_stepsize_one([1])
True
>>> has_stepsize_one([])
True
如果您不希望这样做,则必须检查迭代器的长度。
对于不支持的通用迭代器getitem
,进行比较itertools.count
可能是最好的方法(类似于kaya3的答案):
import itertools
def has_stepsize_one(it):
it = iter(it)
try:
first = next(it)
except StopIteration:
return True
return all(x == y for x, y in zip(it, itertools.count(first + 1)))
>>> has_stepsize_one((i for i in range(10)))
True