【发布时间】:2020-09-06 23:06:05
【问题描述】:
所以基本上,我有一个对象列表。假设每个对象有两个属性:A 和 B。A 是 3 个整数的元组:(A1, A2, A3),B 是整数。此列表可能包含具有相同 A 的对象,我想摆脱那些重复项。但是,我想这样做,在那些具有相同 A 的对象中,选择具有最低 B 的对象。最后,我想要一个包含所有唯一 A 和最低 B 的对象列表。
我想了一会儿,我想我可以用很多 for 循环想出一个非常笨拙的方法来做到这一点,但我觉得在 python 中的函数中必须有一个更好的方法或在某种图书馆中(至少完成其中的一部分)。有人有什么想法吗?
谢谢!
edit:更多细节,这实际上是针对俄罗斯方块 AI,用于查找给定棋子的所有可能动作。我的对象是可能的俄罗斯方块移动树中的节点。每个节点都有两个值:A:(x_position,y_position,rotation)和 B:到达该位置所需的帧数。我从起始位置的根节点开始。在每一步中,我通过向左移动一次、向右移动一次、向左旋转一圈、向右旋转一圈或向下软下拉来创建孩子来扩展树,并且对于每个孩子,我都会更新 A,XYR 位置和 B,到达那里所需的帧数。我将所有这些添加到潜在动作列表中。在此之后,我合并具有相同 XYR 位置的所有节点,选择具有最少帧的节点到达那里。下一步,我展开潜在移动列表中的每个节点并重复该过程。抱歉,我意识到这个解释可能令人困惑,这就是为什么我没有将它包含在原始解释中。我认为这样做是有利的,因为在现代俄罗斯方块中,有一个相当复杂的旋转系统,称为 SRS(超级旋转系统),它允许您使用各种部件执行复杂的旋转,因此通过以这种方式制作探路者并模拟根据 SRS 进行移动是一个好方法,因为它会告诉你移动是否是旋转(发送更多/更少的 dmg),它还可以让你知道执行放置的确切移动(我还存储了一个到达该位置的一系列移动列表)具有最少的帧。稍后,我希望能够弄清楚如何正确地对状态进行哈希处理,因此我不会重新访问,但我仍在弄清楚。
【问题讨论】:
-
如果你真的给出一个实际数据的例子,以及你的过程会产生的实际结果,你的问题会更清楚。
-
好的,我马上更新。
-
我认为@DavidBuck 的“实际数据”并不意味着很长的数据描述。 :)
-
你认为正确@timgeb
-
啊,对不起,哈哈。由于 Mustafa 给出了有效的答案,我现在不会更新它,但下次我提出问题时我会记住它。