Python如何对比两个trigram元组列表返回相同的三元词组组合
Python实现Trigram共同组合提取
实现思路
- 先剥离两个列表中每个元素的频次字段,只保留三元词组元组
- 利用集合的交集特性快速匹配相同元素,天然满足顺序敏感的匹配要求
- 按需求格式化输出结果即可
完整代码
# 示例输入数据 list1 = [(('I', 'want', 'this'), 456), (('What', 'is', 'this'), 25)] list2 = [(('this', 'is', 'what'), 12), (('I', 'want', 'this'), 9)] # 提取所有三元词组转集合,方便快速求交集 trigram_set1 = {item[0] for item in list1} trigram_set2 = {item[0] for item in list2} # 得到共同的trigram组合 common_trigrams = trigram_set1 & trigram_set2 # 按示例要求格式化输出 for gram in common_trigrams: print(f"'{gram[0]}', '{gram[1]}', '{gram[2]}'")
输出结果
运行上述代码会直接输出你需要的结果:
'I', 'want', 'this'
说明
- 因为元组是顺序敏感的可哈希类型,所以词组顺序不同的三元组不会被判定为相同,完全匹配需求规则
- 如果需要把共同结果存为列表,直接执行
list3 = list(common_trigrams)即可 - 该方案时间复杂度为O(n+m)(n、m分别为两个输入列表的长度),大数据量下运行效率也很高
内容的提问来源于stack exchange,提问作者NeedPythonHelp
相关产品推荐
相关产品推荐

