【发布时间】:2019-07-20 20:56:23
【问题描述】:
假设我有一个自定义数据结构Data,它揭示了两个相关属性:tag 表示该项目属于哪个等价类,rank 表示该项目有多好。
我有一组无序的 Data 对象,并且想要检索具有最高 rank 的 n 对象,但每个等价类最多有一个对象。
(同一等价类中的对象不一定比较相等,也不一定具有相同的rank,但我不希望输出中的任何两个元素来自同一类。在其他换句话说,产生这些等价类的关系不是==。)
我的第一个方法看起来像这样:
- 按降序排列列表
rank - 创建一个空集
s - 对于列表中的每个元素:
- 检查其
tag是否在s中;如果是,请继续 - 将其
tag添加到s - 产生该元素
- 如果我们产生了
n元素,请停止
- 检查其
但是,这感觉很尴尬,好像应该有更好的方法(可能使用itertools 和高阶函数)。生成的 n 元素的顺序并不重要。
这个问题的 Pythonic 解决方案是什么?
玩具示例:
Data = namedtuple('Data', ('tag', 'rank'))
n = 3
algorithm_input = { Data('a', 200), Data('a', 100), Data('b', 50), Data('c', 10), Data('d', 5) }
expected_output = { Data('a', 200), Data('b', 50), Data('c', 10) }
【问题讨论】:
-
您可以发布示例输入和预期输出吗?到目前为止有任何代码吗?
-
@AndrejKesely 添加了一个示例。到目前为止,我的代码只是实现了问题中概述的算法,而且效果很好——我只是在寻找一种更好的方法,如果存在的话。
标签: python algorithm sorting equivalence-classes