这段代码让我很头疼。它应该是一个以字符串作为输入的生成器,并用所有可能的字母组合替换所有的{},基本上以类似于itertools.排列()但是添加了常量值。在
我检查了每个元素,似乎我的增量函数变成了一个无限循环。不过,如果我减少正在生成的字符串的数量,这似乎是可行的。有人能解释一下为什么程序在尝试返回所有可能的值时失败?假设您必须在不使用itertools的情况下执行相同的操作,您将如何完成任务?def string_char_combinations(string, chars=False):
if not chars:
chars = [chr(i) for i in range(ord('a'), ord('z')+1)]
varcount = string.count('{}')
a = [0 for i in range(varcount)]
def increment(lst, n):
if n == 0:
return lst ##ERROR: Infinite loop?
print(n)
lst[n] += 1
print(lst)
if lst[n] > len(chars)-1:
lst[n] = 0
lst = increment(lst, n-1)
return lst
while a[0] < len(chars)-1:
a = increment(a, len(a)-1)
yield string.format(*[chars[i] for i in a])
if __name__ == "__main__":
print(list(string_char_combinations("a{}{}a")))