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

如何按元组首元素分组取每组末元素最大项,可通过字典实现吗?

完全可以通过字典实现,实现逻辑非常简洁,时间复杂度仅为O(n),比用pandas处理的性能更高。

实现思路

  • 以元组的第一个元素作为字典的key,每个key对应的值为当前分组内最后一位元素最大的元组
  • 一次遍历所有元组,对每个元组做如下判断:
    • 若当前key不在字典中,直接存入当前元组
    • 若当前key已存在,对比当前元组和字典中存储元组的最后一位数值,若当前元组的数值更大则替换字典中的存储值
  • 遍历完成后直接取出字典的所有值,即为最终结果

可直接运行的代码

def get_target_tuples(tuples_list):
    group_dict = {}
    for tpl in tuples_list:
        key = tpl[0]
        current_last = tpl[-1]
        if key not in group_dict:
            group_dict[key] = tpl
        else:
            # 如果相同最大值需要保留后出现的元组,把>改成>=即可
            if current_last > group_dict[key][-1]:
                group_dict[key] = tpl
    return list(group_dict.values())

# 测试示例
A = [(1, 3, 5, 6, 6), (0, 1, 2, 4, 5), (1, 9, 8, 3, 5), (0, 2, 3, 5, 7)]
print(get_target_tuples(A))
# 输出:[(1, 3, 5, 6, 6), (0, 2, 3, 5, 7)] 完全符合预期

原pandas代码错误原因说明

你原来的代码中grouped_data.max(4)的写法是错误的,max()方法的参数是numeric_only,不是指定按第4列求最大值,调用该方法会对分组内所有列分别求最大值再拼接成新行,不是你需要的「找到最后一列最大的整行数据」。如果要使用pandas实现,正确写法可以参考:

import pandas as pd
def f(sample):
    data = pd.DataFrame(sample)
    # 先按最后一列降序排序,再按分组去重,保留每组第一个(也就是最后一列最大的)行
    result = data.sort_values(by=data.columns[-1], ascending=False).drop_duplicates(subset=0, keep='first')
    return list(result.to_records(index=False))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:57:04