如何从Python列表中获取出现次数最多的元素组合
解决Python列表中出现次数最多的元素组合问题
问题描述
我们需要从嵌套的Python列表中,找出出现次数最多的元素组合;如果多个组合出现频次相同,返回任意一个即可。以下是几个典型场景:
- 示例1:输入
[['mallesham','yamulla'],['mallesham','yamulla'],['yamulla','mallesham']],['mallesham','yamulla']出现2次,是频次最高的组合,输出该组合。 - 示例2:输入
[['Joe','Doe'],['Doe','Joe'],['Doe','Joe'],['Joe','Doe'],['Doe','Joe']],['Doe','Joe']出现3次,频次最高,输出该组合。 - 示例3:输入
[['Joe','Doe'],['Doe','Joe'],['Doe','Joe'],['Joe','Doe']],两个组合频次相同,返回任意一个即可(如['Joe','Doe'])。
解决方案
利用Python标准库collections.Counter统计频次,核心步骤如下:
- 将每个子列表转换为元组(列表不可哈希,无法作为Counter的键);
- 用Counter统计所有元组的出现次数;
- 获取频次最高的元组,再转换回列表形式返回。
代码实现
from collections import Counter def most_frequent_combination(lst): # 子列表转元组,满足Counter的哈希要求 tuple_list = [tuple(item) for item in lst] # 统计各组合出现次数 count = Counter(tuple_list) # 取出现次数最多的组合,most_common(1)返回[(元组, 次数)]格式 most_common_tuple = count.most_common(1)[0][0] # 转回列表返回 return list(most_common_tuple)
示例验证
示例1测试
input1 = [['mallesham','yamulla'],['mallesham','yamulla'],['yamulla','mallesham']] print(most_frequent_combination(input1)) # 输出: ['mallesham', 'yamulla']
示例2测试
input2 = [['Joe','Doe'],['Doe','Joe'],['Doe','Joe'],['Joe','Doe'],['Doe','Joe']] print(most_frequent_combination(input2)) # 输出: ['Doe', 'Joe']
示例3测试
input3 = [['Joe','Doe'],['Doe','Joe'],['Doe','Joe'],['Joe','Doe']] print(most_frequent_combination(input3)) # 输出可能是['Joe','Doe']或['Doe','Joe'],均符合要求
说明
- 当多个组合频次相同时,
Counter.most_common(1)会返回遍历中最先遇到的高频组合,满足“返回任意一个”的需求; - 方案时间复杂度为O(n),n为列表中子元素的数量,效率较高。
内容的提问来源于stack exchange,提问作者myamulla_ciencia
相关产品推荐
相关产品推荐

