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

如何按出现次数降序并关联逆序子列表对列表的列表排序?

问题

给定列表:

list_55 = [[1,2],[2,1],[3,4],[5,6],[4,3],[1,2],[1,2],[6,5],[6,5]]

需要按以下规则排序:

  • 按子列表的出现次数降序排列
  • 每个子列表与其逆序子列表放在一起(例如[1,2]的所有实例后紧跟[2,1])

期望输出:

[[1,2],[1,2],[1,2],[2,1],[6,5],[6,5],[5,6],[4,3],[3,4]]

已尝试的代码及结果:

  1. 按出现次数排序:
sorted(list_55, key=list_55.count, reverse=True)

结果:

[[1, 2], [1, 2], [1, 2], [6, 5], [6, 5], [2, 1], [3, 4], [5, 6], [4, 3]]
  1. 直接逆序排序:
sorted(list_55,reverse=True)

结果:

[[6, 5], [6, 5], [5, 6], [4, 3], [3, 4], [2, 1], [1, 2], [1, 2], [1, 2]]

需要结合两种排序效果,实现符合要求的排序。

解决方案

可以通过设计多层优先级的排序key,同时满足「总出现次数降序」和「子列表与逆序同组」的需求,具体实现如下:

高效实现(用Counter优化性能)

from collections import Counter

list_55 = [[1,2],[2,1],[3,4],[5,6],[4,3],[1,2],[1,2],[6,5],[6,5]]

# 先统计每个子列表的出现次数(转成元组,因为列表不可哈希)
counts = Counter(tuple(sublist) for sublist in list_55)

def sort_key(sublist):
    t = tuple(sublist)
    rev_t = tuple(reversed(t))
    # 第一优先级:子列表+逆序的总出现次数(取负值实现降序)
    total_count = counts.get(t, 0) + counts.get(rev_t, 0)
    # 第二优先级:当前子列表自身的出现次数(取负值实现降序)
    current_count = counts.get(t, 0)
    # 第三优先级:保证原列表排在逆序前面(字典序小的在前)
    is_reversed = 0 if t <= rev_t else 1
    return (-total_count, -current_count, is_reversed)

# 执行排序
result = sorted(list_55, key=sort_key)
print(result)

代码说明

  1. 统计次数:用Counter一次性统计所有子列表的出现次数,避免重复调用list.count()带来的性能损耗。
  2. 排序逻辑:
    • 总出现次数优先:确保[1,2]和[2,1]这类逆序组的总次数高的排在最前
    • 自身次数次之:同组内出现次数多的子列表排在前面(比如[1,2]的实例先于[2,1])
    • 逆序区分收尾:通过字典序判断,保证原列表和其逆序能相邻排列

运行后输出:

[[1, 2], [1, 2], [1, 2], [2, 1], [6, 5], [6, 5], [5, 6], [3, 4], [4, 3]]

简化版(小数据量适用)

如果数据量不大,也可以不用Counter,直接用list.count()实现:

list_55 = [[1,2],[2,1],[3,4],[5,6],[4,3],[1,2],[1,2],[6,5],[6,5]]

def sort_key(sublist):
    rev_sublist = sublist[::-1]
    total_count = list_55.count(sublist) + list_55.count(rev_sublist)
    current_count = list_55.count(sublist)
    is_reversed = 0 if sublist <= rev_sublist else 1
    return (-total_count, -current_count, is_reversed)

result = sorted(list_55, key=sort_key)
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:27:14