如何将列表上的函数调用到 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]']
我正在尝试编写一个 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]']