如何仅通过正向遍历从字符串中提取匹配单词(Python实现)
正向遍历筛选匹配指定字符集的单词(Python实现)
如果需要仅通过正向遍历从单词列表里筛选出所有字符都属于目标字符串字符集的单词,我整理了一个基于collections.Counter的实现方案,逻辑清晰且容易理解:
实现思路
- 先把目标字符串转换成字符集合(
set),方便快速判断字符是否存在 - 遍历输入的每个单词,用
Counter统计单词里的字符出现情况 - 正向遍历单词的每个唯一字符,检查是否都在目标字符集合中
- 若所有字符都符合条件,就输出这个单词
完整代码
from collections import Counter def possiblewords(input, charset): # 逐个遍历输入列表里的每个单词 for word in input: # 用Counter统计当前单词的字符分布 word_char_count = Counter(word) # 标记当前单词是否符合条件 is_valid = 1 # 遍历单词的所有唯一字符,检查是否都在目标字符集里 for char in word_char_count.keys(): if char not in charset: is_valid = 0 break # 只要有一个字符不符合,直接跳出循环 # 符合条件就打印该单词 if is_valid == 1: print(word) # 测试用的驱动代码 if __name__ == "__main__": input_words = ['nipple','apple','pine','pile'] target_str = "pineapple" target_charset = set(target_str) possiblewords(input_words, target_charset)
代码说明
- 用
set(target_str)把目标字符串转成集合,是因为集合的成员检查(in操作)时间复杂度是O(1),比直接在字符串里查找更快 Counter(word)用来获取单词的唯一字符,避免重复检查同一个字符,提升遍历效率- 一旦发现某个字符不在目标集合里,直接
break跳出循环,不用继续检查后续字符,进一步优化了执行效率
运行这段代码后,会输出所有字符都来自"pineapple"的单词:nipple、apple、pine、pile
内容的提问来源于stack exchange,提问作者Taini
相关产品推荐
相关产品推荐

