如何将列表上的函数调用到 return 增量位范围

How to call a function on list to return incremental bits range

我正在尝试编写一个 returns 从 [from:to] 格式的位到位的函数。 我不太确定它究竟是如何完成的(递归地?)。预期输出在增量位范围内。这是开始的一段代码,

cntlist = [5,1,4,3,1]
def find_size(cnt):
    if cnt>1:
        a = "[%s:%s]" % (cnt-1, cnt-cnt)
        left = cnt-1
        right = cnt-cnt
    if cnt==1:
        a = "[%s]" % (cnt)
        left = a
        right = a
    return a, left, right

newlist = list(map(find_size, cntlist))
print(newlist)

输出:

[('[4:0]', 4, 0), ('[1]', '[1]', '[1]'), ('[3:0]', 3, 0), ('[2:0]', 2, 0), ('[1]', '[1]', '[1]')]

预期输出:

['[4:0]', '[5]', '[9:6]', '[12:10]', '[13]']

注意:如果 cntlist 中的大小为 1,则该范围将只有一个元素,该元素将为上一个范围的左侧数字 +1。

IIUC,一个简单的循环应该可以工作:

def bitrange(cntlst):
    out = []
    total = 0
    for i in cntlst:
        prev = total
        total += i
        if i == 1:
            out.append(f'[{total-1}]')
        else:
            out.append(f'[{total-1}:{prev}]')
    return out

bitrange([5,1,4,3,1])

输出:

['[4:0]', '[5]', '[9:6]', '[12:10]', '[13]']