如何在list上调用函数以返回增量位范围



我正试图编写一个以[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中size为1,则范围将只有一个元素,该元素将在前一个范围的左数上加1。

这样的话,一个简单的循环就可以了:

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

最新更新