python - 如何按每个元组中的第一个元素对元组列表进行排序,并选择每个组中具有最大最后一个元素的元组
问题描述
这里我有一个 n k 元组的列表(这里我设置 n = 4,k = 5)
A = [(1, 3, 5, 6, 6), (0, 1, 2, 4, 5), (1, 9, 8, 3, 5), (0, 2, 3, 5, 7)]
我希望按它们的第一个元素对这些元组进行排序,所以它将是 2 个组。在每个组中,我只想选择最后一个元素最大的 1 个元组。所以在这种情况下,我希望我的函数输出是一个元组列表,比如
[(1, 3, 5, 6, 6),
(0, 2, 3, 5, 7)]
以下是我的尝试,似乎效果不佳
import pandas as pd
import numpy as np
def f (sample):
data = pd.DataFrame(sample)
grouped_data = data.groupby(0)
maximums = grouped_data.max(4)
result = list(maximums.to_records(index = False))
return result
我想知道这是否可以通过编写字典来完成?如果是这样,怎么做?欢迎任何提示或帮助。
解决方案
您可以itertools.groupby
为此使用:
import itertools
def by_first_element(t):
return t[0]
def by_last_element(t):
return t[-1]
sorted_A = sorted(A, key=by_first_element)
groups = [[*g] for _, g in itertools.groupby(sorted_A, key=by_first_element)]
max_of_each_group = [max(g, key=by_last_element) for g in groups]
输出:
[(0, 2, 3, 5, 7), (1, 3, 5, 6, 6)]
或者,是的,您可以使用字典:
groups = {}
for t in A:
groups[t[0]] = groups.get(t[0], []) + [t]
max_of_each_group = [max(g, key=lambda t: t[-1]) for g in groups.values()]
如果你想max_of_each_group
排序,那么
>>> sorted(max_of_each_group, key=lambda t: t[0])
[(0, 2, 3, 5, 7), (1, 3, 5, 6, 6)]
推荐阅读
- dart - 从 jQuery 到颤振/飞镖 - $.ajax
- haskell - 使用 mapConcurrently 读取标准输入,进行 HTTP 调用并并行写入标准输出
- python - 任何清除变量而不将其设置为全局的方法
- c++ - 无法在 Ubuntu 上使用 CMake 构建 C++ 程序的断点
- python - python pandas自动excel查找系统
- python - 导入本地创建的模块
- java - 在 Spark 中执行两次 groupbykey 的最佳实践?
- python - 如何在 Python 中结合列表和字典?
- java - Java lambda:预期对象但找到 MyClass
- sql - 在 SQL 中将字母转换为数字