【发布时间】:2020-12-28 22:00:43
【问题描述】:
我有一个奇怪的问题,所以我只是演示一下,让你更容易理解。我有两个列表:
>>> a = [1, 2, 20, 6, 210]
>>> b = [20, 6, 1]
我正在寻找的结果是 3(列表 a 中最后一个匹配项的位置基于 b 中的匹配)
b 总是有较少的数据,因为它包含列表 a 的所有重复项。我想知道 B 中的哪个项目与列表 a 中的最匹配。所以在这个例子中,它将是 6,因为 6 在 A 的列表中最远。
有没有一种简单的方法可以做到这一点 - 我最初的方法是嵌套循环,但我怀疑有更简单的方法?
【问题讨论】:
-
这是一个简单的
sorted(b, key=a.index)[-1] -
你也可以使用来自 more_itertools 的
sort_together -
对于所描述的特定情况,最简单(如果不一定是最有效)的代码就是
max(b, key=a.index)(或b.sort(key=a.index)/sorted(b, key=a.index),如果您需要对整个列表进行排序,而不仅仅是最大描述的值)。 -
@Lostsoul 如果您甚至从
a中删除了重复项,那么a.index就可以了。 -
谢谢!抱歉,当推荐的问题没有解决我的问题时,我不确定为什么该问题已关闭。我希望你们可以发布实际答案并获得支持,但无论如何,非常感谢你们解决了我的问题。 @ShadowRanger 的回答会被接受。