我想检查我给定的列表是否递增 1
所以:
[1,2,3,4] = 真 [1,3,4,5] = 假
如果可能的话,我想用一些特定于 python 的函数来完成它——所以不要用 for if 组合循环它,而是用类似 all(... for values in 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's answer ):
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
