问候stackoverflow的朋友。我决定今天晚上变得有点疯狂,并通过for循环来迭代我创建的列表。
然而,看来派对已经开始了,因为我想创建一个范围的方式不是很明显,既不是通过研究也不是玩弄,并且证明是令人讨厌的欲望:我想以类似的方式创建一系列数字,通常创建一个范围......通过指定范围(开始,停止,步骤),但我可以另外指定一个小的改动step'sweve'值使得范围执行更像范围(开始,停止,步骤:扫描)
也就是说,如果上面存在光荣的功能,它可以用作以下内容;
range(0,16,3:5)
# [0,3,4,5,8,9,10,13,14,15]
另一个例子!
range(0,24,2:9)
# [0,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,20,21,22,23]
还有一个!
range(0,24,3:9)
# [0,3,4,5,6,7,8,9,12,13,14,15,16,17,18,21,22,23]
最后一个。
swept_range(5,20,3,4)
# [7, 8, 11, 12, 15, 16, 19]
在英语中,我想要一种简单的方法来创建一系列有序数字,这些数字保持在每个第N到第N + D个数字组中,其中D是一个正数。
我看过切片无济于事。
我知道MATLAB可以简洁地做到这一点,但不确定这是否存在于Python中 - 是否有人?
答案 0 :(得分:1)
def yrange(st, sp, N, D):
return [st] + [j for i in range(st,sp,D) for j in range(i+N,i+D+1) if j < sp]
print yrange(0, 16, 3, 5)
# [0, 3, 4, 5, 8, 9, 10, 13, 14, 15]
print yrange(0, 24, 2, 9)
# [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23]
print yrange(0, 24, 3, 9)
# [0, 3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 16, 17, 18, 21, 22, 23]
答案 1 :(得分:1)
这个生成器怎么样,使用模运算:
def swept_range(start, stop, step=1, sweep=1):
for i in range(start, stop):
if not 0 < i % sweep < step:
yield i
如果需要序列而不是迭代器,也可以使用列表推导:
def swept_range(start, stop, step=1, sweep=1):
return [i for i in range(start, stop) if not 0 < i % sweep < step]
答案 2 :(得分:0)
def srange(start, stop, step=1, sweep=0):
if sweep < 0 :
raise Exception("sweep needs to be positive.")
STEPPING = 0
SWEEPING = 1
state = STEPPING
next = start
res = []
while next < stop:
res.append(next)
#ignores state if sweep is 0
if state == STEPPING or sweep == 0 :
state = SWEEPING
next = next + step
elif state == SWEEPING :
next = next + 1
if next % sweep == 0:
state = STEPPING
return res