Python如何动态调整for循环层数实现任意长度小写字母单词搜索
解决方案
直接使用Python标准库中的itertools.product生成任意长度的字母组合笛卡尔积,无需手动编写多层嵌套循环,即可适配用户输入的任意长度目标单词。
改进后代码
import itertools def start_of_func(): characters = ['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'] look_for = input("search for a specific word: ") target_len = len(look_for) count = 0 # 生成target_len长度的所有字母组合,替代多层嵌套循环 for combo in itertools.product(characters, repeat=target_len): count += 1 current_str = ''.join(combo) print(current_str) # 如需完全对齐原逻辑判断目标词是否在累计字符串中,可自行维护total变量 if look_for == current_str: print(f"found it! This took {count} attempts.") return if __name__ == "__main__": start_of_func()
逻辑说明
itertools.product的repeat参数可以动态指定生成组合的长度,值设为用户输入的目标单词长度即可自动适配遍历层数- 相比原硬编码的3层嵌套循环,新写法支持任意长度的目标单词搜索,代码更简洁易维护
提示:原代码中把所有生成的组合拼接到
total字符串再判断包含关系,会出现跨组合匹配的问题(比如组合zzz和aaa拼接后为zzz, aaa,此时搜索za也会被误命中),如果不需要这种特殊逻辑,直接判断当前生成的字符串是否匹配目标词即可,还能大幅提升长单词搜索的性能。
内容的提问来源于stack exchange,提问作者Mathe
相关产品推荐
相关产品推荐

