多列表按列提取众数:给定三列表求各列最频现数值
嘿,这个需求很清晰,我给你两种Python实现方案,都是简单易懂的:
解法一:使用collections.Counter(最直观高效)
Counter是Python标准库中专门用来统计元素频率的工具,用它来处理这个问题非常顺手:
from collections import Counter list1 = [1, 5, 5, 4, 2] list2 = [1, 4, 5, 3, 4] list3 = [2, 5, 4, 3, 4] result = [] # 用zip把三个列表按索引位置打包,每一个元组就是对应"列"的所有元素 for column in zip(list1, list2, list3): # 统计当前列每个数字的出现次数 num_counts = Counter(column) # most_common(1)返回出现次数最多的元素及其次数,格式为[(数字, 次数)],取第一个元素即可 most_frequent_num = num_counts.most_common(1)[0][0] result.append(most_frequent_num) print(result) # 输出: [1, 5, 5, 3, 4]
说明:
zip(list1, list2, list3)会自动把三个列表对应索引的元素打包成元组,比如第一个元组是(1, 1, 2),正好对应你说的"第1列数值集合";Counter会快速统计每个元素的出现频率,省去手动计数的麻烦;- 如果某一列有多个数字出现频率相同(比如列是
(1,2,1)和(2,1,2)),most_common会返回最先出现的那个高频元素(Python3.7+版本中,Counter会保留元素的插入顺序)。
解法二:手动统计频率(无需导入模块)
如果你不想依赖标准库的Counter,也可以用字典手动实现频率统计:
list1 = [1, 5, 5, 4, 2] list2 = [1, 4, 5, 3, 4] list3 = [2, 5, 4, 3, 4] result = [] for column in zip(list1, list2, list3): freq_dict = {} # 遍历当前列的每个数字,统计次数 for num in column: freq_dict[num] = freq_dict.get(num, 0) + 1 # 找到频率最高的数字:用max函数,按字典的值(频率)排序 most_frequent_num = max(freq_dict, key=freq_dict.get) result.append(most_frequent_num) print(result) # 输出: [1, 5, 5, 3, 4]
说明:
freq_dict.get(num, 0)表示如果字典里没有num这个键,就返回默认值0,然后加1实现计数;max(freq_dict, key=freq_dict.get)会遍历字典的所有键,找到对应值(频率)最大的那个键,也就是我们要的高频数字。
内容的提问来源于stack exchange,提问作者Fran
相关产品推荐
相关产品推荐

