是否有一种简单的单行方式来排除Python中范围函数的第一个元素?
只是为了澄清,该步骤也可以是否定的。我目前只是在做这个。
def excl_range(start, end, step):
if step > 0:
return range(start + 1, end, step)
return range(start - 1, end, step)
我只是想知道是否有一种更干净的方法,最好不使用新函数来做到这一点。
回答
一个很少提及或使用的事实range是,它是Python 3 中的完整序列类型。这意味着您可以直接索引对象,包括切片:
range(...)[1:]
这相当于增加start了step。请注意,step 的符号无关紧要:start + step根据定义,第二个元素始终是:
range(start + step, end, step)
您还可以在迭代期间排除元素:
it = iter(range(...))
next(it)
for x in it:
...
这适用于任何可迭代对象,而不仅仅是range. 您可以使用以下方法进行等效操作itertools.islice:
for x in islice(range(...), 1):
...