這是我正在處理的代碼的一部分:
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是一本字典的鍵是二進制字串,和值是一些整數。此函式將鍵中具有相同“翻轉”的所有值組合在一起,并在輸出中按升序對它們進行排序。例如:
>>> 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]。
uj5u.com熱心網友回復:
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())]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/399275.html
