Python实现两个字符串列表的单词级交集提取方法
实现方案
核心逻辑分两步:先将两个列表中的所有字符串按空白拆分为独立单词,再筛选出两个单词集合中共同存在的单词,按需匹配输出顺序。
具体实现代码
首先定义原始输入列表:
a = ['ketab khaneh','danesh gah', 'shi rin i'] b = ['ketab khaneh','dan esh gah','shirin i']
可匹配指定输出顺序的实现
如果需要输出的单词顺序和其在a列表中的出现顺序保持一致(和你给出的示例输出完全匹配),可以用以下写法:
# 收集b列表拆分后的所有单词,用集合实现快速查找 b_word_set = set() for sentence in b: b_word_set.update(sentence.split()) output = [] recorded = set() # 遍历a列表拆分所有单词,筛选出在b中存在的项 for sentence in a: for word in sentence.split(): # 跳过不符合条件、或已经加入结果的重复单词 if word in b_word_set and word not in recorded: output.append(word) recorded.add(word)
运行后得到的结果和示例完全一致:['ketab', 'khaneh', 'gah', 'i']
简化版(不要求固定顺序)
如果不需要严格的单词出现顺序,直接用集合求交集的写法更简洁:
# 收集两个列表拆分后的所有单词 words_a = set(word for sentence in a for word in sentence.split()) words_b = set(word for sentence in b for word in sentence.split()) # 求交集后转成列表 output = list(words_a & words_b)
关键细节说明
- 用不带参数的
split()方法拆分字符串,可自动适配多个连续空格、制表符等空白分隔符,比按单个空格拆分的鲁棒性更强。 - 用集合存储待查找的单词,可将单次查找的时间复杂度从O(n)降到O(1),处理长列表时效率更高。
- 额外增加的
recorded集合用于自动去重,避免输入列表中出现重复单词时,输出结果里出现冗余重复项。
内容的提问来源于stack exchange,提问作者Soheila
相关产品推荐
相关产品推荐

