我试图编写一个程序,打印两到四个字符之间的每个可能的字母组合。我现在的程序工作得很好,但实现远非理想。这就是现在的情况:
# make a list that contains ascii characters A to z
ascii = list(range(65, 123))
del ascii[91 - 65 : 97 - 65] # values 91-97 aren't letters
for c1, c2 in product(ascii, repeat=2):
word = chr(c1) + chr(c2)
print(word)
for c1, c2, c3 in product(ascii, repeat=3):
word = chr(c1) + chr(c2) + chr(c3)
print(word)
for c1, c2, c3, c4 in product(ascii, repeat=4):
word = chr(c1) + chr(c2) + chr(c3) + chr(c4)
print(word)
我更愿意在以下精神中拥有一些东西。请原谅我以下代码是完全错误的,我试图传达我认为更好的实现精神。
iterationvars = [c1, c2, c3, c4]
for i in range(2,5):
for iterationvars[0:i] in product(ascii, repeat=i):
word = ??
print(word)
所以我有两个问题:
1)如何在'母循环的每次迭代中更改嵌套for循环的个迭代变量数量?
2)如何实现 word ,使其动态地累加所有迭代变量,无论该特定迭代有多少。
当然,与我的建议完全不同的实现也非常受欢迎。非常感谢!
答案 0 :(得分:0)
没有必要更改迭代变量的数量,只需将它们全部保存在一个元组中,然后使用连接列表理解。像这样的东西会起作用:
for iter_tuple in product(ascii, repeat = i):
word = ''.join(chr(x) for x in iter_tuple)
print(word)