'fill in'列表中缺少的位置,包括零



以下是我正在处理的部分代码:

def count_flip(string, init = '0'):
x0 = init + string
return sum(x != y for x, y in zip(x0, x0[1:]))
def absorb_counts(results):
flip_counts = Counter()
for binary_string, value in results.items():
flip_counts[count_flip(binary_string)] += value
return [v for _, v in sorted(flip_counts.items())]

absorb_counts的输入results是一个字典,其键是二进制字符串,值是一些整数。此函数将键中具有相同"flip"的所有值组合在一起,并在输出中按升序对它们进行排序。例如:

>>> test = {'011': 11, '111': 11, '110': 13, '100': 31, '001': 9, '000': 738, '010': 118, '101': 93}
>>> absorb_counts(test)
[738, 31, 162, 93]

这四个数字是738(0翻转(、31(1翻转(等。(前面有一个额外的'0',由count_flip给出。(

问题:有时我的输入results没有所有可能的二进制字符串。在这种情况下,输出是一个缺少位置的精简列表。例如:

>>> test_1 = { '110': 13, '100': 31, '000': 738, '010': 118, '101': 93}
>>> absorb_counts(test_1)
[738, 162, 93]

如何在这样的位置上"填充"零?在这种情况下,输出将是[738, 0, 162, 93]

在开始累积计数之前,您可以遍历range(int(max(results), base=2))并初始化所有相应的键。如果你这样做,你甚至不需要Counter,因为你从零开始:

def absorb_counts(results):
flip_counts = {
count_flip(bin(i)[2:]): 0
for i in range(int(max(results), base=2))
}
for binary_string, value in results.items():
flip_counts[count_flip(binary_string)] += value
return [v for _, v in sorted(flip_counts.items())]

最新更新