Python 3.8 生成所有字母、数字及符号组合的代码实现求助
修改递归代码以生成任意长度的字符组合
没问题,我帮你调整这段代码,让它能生成你需要的任意长度范围的所有字母、数字和符号组合。先看修改后的完整版本,再给你拆解关键改动和注意事项:
# 定义所有需要的字符集合 lower_a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] upper_a = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] # 补充常见符号集合(可根据需求增删) symbols = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '[', ']', '{', '}', ';', ':', "'", '"', ',', '.', '<', '>', '/', '?', '\\', '|', '~', '`'] # 合并所有字符,避免用Python内置的`all`做变量名 all_chars = lower_a + upper_a + num + symbols def recursive_product(char_list, length, current_str = ""): if length == 0: print(current_str) return for char in char_list: recursive_product(char_list, length - 1, current_str + char) # 设置你想要生成的最大组合长度,比如这里生成1到4长度的所有组合 max_length = 4 for length in range(1, max_length + 1): recursive_product(all_chars, length)
关键改动说明
- 修复变量名冲突:原代码用了
all作为变量名,这是Python内置函数的名字,容易引发隐性bug,我改成了all_chars。 - 补充符号集合:你原来的代码只包含字母和数字,我添加了常见符号,你可以根据需要随时增删符号列表里的内容。
- 灵活控制组合长度:把原代码里固定的
range(1, 3)改成了用max_length变量控制,只要修改max_length的值,就能生成从1到该值的所有长度的组合。比如设置max_length=5,就会生成长度1到5的所有组合。
重要提醒:组合数量爆炸问题
这个是你必须重视的!字符组合的数量是指数级增长的:
- 仅字母+数字(62个字符):
- 长度1:62个组合
- 长度2:62²=3844个
- 长度8:62⁸=218万亿个!
- 加上符号后(94个字符):
- 长度8:94⁸=6.09万亿亿个!
哪怕你的电脑每秒能生成1亿个组合,长度8的62字符组合也要跑69年,更别说带符号的了。所以实际使用时一定要谨慎设置max_length,绝对不要轻易尝试长度超过5的组合(除非你有超级计算机和无限时间)。
效率优化建议
原代码用print输出到控制台,速度非常慢,强烈建议改成写入文件:
def recursive_product(char_list, length, current_str = "", output_file=None): if length == 0: output_file.write(current_str + '\n') return for char in char_list: recursive_product(char_list, length - 1, current_str + char, output_file) # 使用示例:把结果写入combinations.txt文件 max_length = 3 with open('combinations.txt', 'w', encoding='utf-8') as f: for length in range(1, max_length + 1): recursive_product(all_chars, length, output_file=f)
文件写入的速度比控制台打印快几个数量级,能大幅提升程序运行效率。
内容的提问来源于stack exchange,提问作者Ad Ro
相关产品推荐
相关产品推荐

