簡體   English   中英

Python:創建一個有序數字范圍,跳過每Nth到Nth + D個數字的倒數

[英]Python: Create a range of ordered numbers skipping the inverse of every Nth through Nth+D number

問候stackoverflow的朋友。 我決定今天晚上變得有點瘋狂,並參加for循環來遍歷我創建的列表。

不過,該黨似乎受到了困擾,因為無論是通過研究還是在游戲中玩弄,都令人煩惱,我想要創建范圍的方式並不明顯

需求:我想以與通常創建范圍類似的方式來創建一個數字范圍...通過指定范圍(開始,停止,步進),但稍作改動,我可以另外指定一個步進的值,以使范圍的執行效果更類似於范圍(開始,停止,步進:掃描)

就是說,如果上面的光榮功能存在,它就可以按如下方式使用:

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至Nth + D個數字組中,其中D是一些正數。

我看了片都無濟於事。

我知道MATLAB可以簡潔地執行此操作,但不確定Python中是否存在-有人嗎?

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]

如何使用模塊化算法生成器:

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]
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM