You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何计算子列表顺序不敏感的嵌套列表众数

嵌套列表无序匹配求众数实现方案

需求规则

从元素为列表的嵌套列表结构中求解众数,需满足以下规则:

  • 子列表内部元素顺序不影响相等判定,例如["red", "blue"] == ["blue", "red"],二者视为完全相等
  • 若存在多个频次相同的最高频元素(即多个众数),需返回全部众数:将所有众数子列表拼接为单个列表后去重,效果等价于对所有众数子列表取并集
  • 示例场景中,频次最高的子列表会被纳入结果集,最终返回去重后的并集

测试数据

my_list = [
    ["red", "blue", "blue"],
    ["red"],
    ["blue","yellow"],
    ["green","yellow"],
    ["pink"],
    ["red", "blue", "blue"],
    ["red", "green", "red"], 
    ["red", "yellow", "red"],
    ["green", "red", "blue"],   # +1
    ["blue", "green", "red"],   # +1
    ["red", "green", "blue"],   # +1
    ["red", "green", "blue"],   # +1
    ["pink", "brown", "black"],   # +2
    ["pink", "brown", "black"],   # +2
    ["pink", "brown", "black"],   # +2
    ["pink", "brown", "black"],   # +2
]

现有方案问题

  • 思路方向:将所有子列表按固定规则排序后统计频次,再提取最高频元素,该思路逻辑可行,但需要注意保留子列表内的重复元素信息
  • 直接调用标准库statistics.mode无法适配嵌套列表场景,不支持子列表无序判定,也无法处理多众数取并集的需求

可直接运行的实现代码

核心逻辑是将每个子列表排序后转为可哈希的元组作为统计键,既解决无序判定问题,也能保留子列表内的重复元素,避免误判包含重复值的子列表。

from collections import Counter

def get_nested_list_mode(nested_list):
    count_map = Counter()
    # 建立排序元组到原子列表的映射
    origin_sub_map = {}
    for sub_list in nested_list:
        # 按统一规则排序后转元组,作为统计的唯一键
        sorted_key = tuple(sorted(sub_list))
        count_map[sorted_key] += 1
        if sorted_key not in origin_sub_map:
            origin_sub_map[sorted_key] = sub_list
    # 取最高频次
    max_freq = max(count_map.values())
    # 收集所有达到最高频次的子列表
    mode_groups = [origin_sub_map[key] for key, freq in count_map.items() if freq == max_freq]
    # 多众数拼接后去重,等价于取并集
    return list({element for group in mode_groups for element in group})

# 测试调用
if __name__ == "__main__":
    result = get_nested_list_mode(my_list)
    print(result)

注意:不要使用frozenset作为统计键,frozenset会自动丢弃子列表内的重复元素,会把["red", "blue", "blue"]和["red", "blue"]判定为相等,不符合需求。

针对给出的测试数据,["red", "green", "blue"]和["pink", "brown", "black"]均出现4次,为并列最高频,最终返回的并集结果为['red', 'blue', 'green', 'pink', 'brown', 'black'],符合规则要求。如果单组子列表频次最高,则返回该子列表去重后的元素集合。

内容的提问来源于stack exchange,提问作者Aayush Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 08:42:28