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