0

较早的帖子中有以下代码:

def hamming(num, dist):
    if dist == 0:
        return num
    else:
        outputlist = list()
        for item in range(len(num)):
            if len(num[item:]) > dist - 1:
                if num[item] == "0":
                    restoflist = hamming(num[item + 1:], dist - 1)
                    outputlist.append(num[:item] + "1" + str(restoflist))
                else:
                    restoflist = hamming(num[item + 1:], dist - 1)
                    outputlist.append(num[:item] + "0" + str(restoflist))                
        return outputlist

背后的原因是if len(num[item:]) > dist - 1什么?

4

2 回答 2

2

测试确保切片端的num长度足以dist-1与当前字符串有距离。如果没有,那么递归就没有意义了。另一种编写该测试的方法(会更有效)是len(num)-item >= dist.

但实际上,应该放弃检查并for改变循环的边界:

for item in range(len(num) - dist + 1):
    if num[item] == "0":
        # ...
于 2014-05-27T02:55:58.207 回答
0

num[item:] 将返回从 item 的索引开始到末尾的列表。因此,它的长度将获得直到列表末尾的元素。

dist -1 相当于说 >= dist。

于 2014-05-27T02:37:15.143 回答