旧帖子的解释:附加列表和递归(汉明距离) - Python 3

时间:2014-05-27 02:30:44

标签: python recursion hamming-distance

An older post包含此代码:

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背后的原因是什么?

2 个答案:

答案 0 :(得分:2)

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

但实际上,应该删除检查并改变for循环的界限:

for item in range(len(num) - dist + 1):
    if num[item] == "0":
        # ...

答案 1 :(得分:0)

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

dist -1相当于说> = dist。