【问题标题】:sort a list in python by order of two other lists按其他两个列表的顺序对python中的列表进行排序
【发布时间】:2019-09-24 18:24:21
【问题描述】:

我有一个有趣的问题,但我还没有找到任何解决方案。 有两个具有相同值但顺序不同的列表。我重新排序一个列表,以便列表变得相同。没关系,但我还需要用相同的键重新排序第三个列表。

我无法在我的代码中使用 zip 或枚举来检索第二个列表的新索引。

first=[(1,1,1),(2,2,2),(3,3,3)]
second=[(2,2,2),(3,3,3),(1,1,1)]
third=[2,3,1]

second=sorted(second,key=first.index)

print(second)

[(1,1,1),(2,2,2),(3,3,3)]

d = [i[0] for i in sorted(enumerate(second), key=lambda x:first.index)]

d 应该是 (2,0,1) 但它不起作用

第三个列表的目标是:[1,2,3]

【问题讨论】:

  • 我理解到最后一句话。为什么第三个应该是 [1, 2, 3]?
  • third 是否总是类似于 second,即 2.. 3... 1..?
  • 不,我明白了......我的例子非常简单......这些列表的值可以是任何浮点数,没有特定的顺序,除了第一个和第二个中的值是相同的,但是以不同的顺序。第三个可以看作是属于原始第二个列表中的项目的对象。
  • 是的,第三个总是与第二个相似,但具有完全不同的值。我的目标是像第二名一样获得第三名。

标签: python list sorting


【解决方案1】:

要获取[1, 2, 3],请使用:

third = sorted(third, key=list(map(lambda x: x[0],first)).index)

要获取[2, 0, 1],请使用:

d = sorted(range(second), key=lambda x: first[x])

【讨论】:

  • 谢谢,但在我的真实代码中,我不能使用 thirst 的值来排第三。我需要使用与第二个相同的重新排序索引。
  • 我检索到 d 的以下错误:TypeError: 'list' 对象不能被解释为整数。
【解决方案2】:

这个问题解决了。 可以从重新排序的“第二个”中获取索引,如 LINK 所示,并使用此索引列表对任何其他列表进行排序。

Sort python list by order of another list AND retrieve old index

【讨论】:

    最近更新 更多