我正试图编写一个以[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]']