Python中如何组合两个列表实现含多拼写变体的用户输入匹配校验?
你提出的拆分后分别校验对应位置单词的方案完全可行,而且比最初穷举所有组合的方案更易维护、扩展性更好。
原穷举方案的问题在于,如果后续每个单词的合法变体增加,需要维护的组合数量是两个单词变体数量的乘积,成本会指数级上升;拆分后只需要分别维护各自的变体列表即可,复杂度是线性的。
现有方案的可优化点
- 输入拆分逻辑有隐患:用
split(' ')只能按单个空格拆分,如果用户输入了多个空格分隔单词、单词前后有空格、或者用制表符分隔,会得到多余的空元素,甚至触发索引越界报错。建议换成无参数的split(),会自动处理任意长度的空白字符,同时忽略首尾空白。 - 建议先判断拆分后的单词数量是否符合要求(这里是2个),避免后续访问列表下标时报错。
- 列表的
in查询是遍历匹配,时间复杂度为O(n),如果变体数量多,建议把变体列表换成集合(set),查询时间复杂度为O(1),效率更高。
优化后的代码示例
words = input("Enter 'Hello World' however you want to type it ") # 变体用集合存储,提升查询效率 valid_first = {"Hello", "hello", "Helo", "helo"} valid_second = {"World", "world"} # 拆分输入,自动处理多空白、首尾空白 word_parts = words.split() # 先校验长度,再分别校验每个位置的单词 if len(word_parts) == 2 and word_parts[0] in valid_first and word_parts[1] in valid_second: print("true")
如果后续要扩展到更多单词的校验场景,可以把合法变体按位置存在列表里循环校验,进一步提升扩展性:
# 按顺序存储每个位置的合法变体集合 valid_list = [ {"Hello", "hello", "Helo", "helo"}, {"World", "world"}, {"Test", "test"} ] word_parts = input("输入内容:").split() if len(word_parts) == len(valid_list) and all(part in valid for part, valid in zip(word_parts, valid_list)): print("true")
内容的提问来源于stack exchange,提问作者gurkensaas
相关产品推荐
相关产品推荐

