【问题标题】:How do you sort a list in python by comparing it to a separate list?如何通过将 python 中的列表与单独的列表进行比较来对列表进行排序?
【发布时间】:2015-02-18 19:47:30
【问题描述】:

假设我有一个列表:

A = [cat, dog, mouse, horse, bird, rabbit]

将用作参考列表,以及另一个列表:

B = [dog, rabbit, horse, bird, cat, dog]

具有与参考列表完全相同的元素,但顺序不同。 我想按照与列表 A 完全相同的顺序对列表 B 进行排序,所以我尝试的是:

for indexA in range(0, len(A)):
    for indexB in range(0, len(B)):
        if A[indexA] == B[indexB]:
            B[indexA], B[indexB] = B[indexB], B[indexA]

但这并不完全有效...... 解决此问题的最佳方法是什么?

【问题讨论】:

  • 把A变成一个整数字典,用它对B进行排序
  • @StevenRumbalski 我认为 OP 没有说清楚。 OP想要做的是让A作为排序基础,B中的元素肯定都来自A,但现在OP希望它们按A的顺序排列。
  • 嗯...迂腐地说...如果 B has the exact same elements 作为参考列表,那么:B=A[:] 应该可以工作!

标签: python


【解决方案1】:

您可以使用sortsortedkey 一起使用当前单词的A.index

>>> sorted(B, key = A.index)
['cat', 'dog', 'dog', 'horse', 'bird', 'rabbit']

【讨论】:

    【解决方案2】:

    对于如此小的列表,算法复杂性并不重要,但您可以避免使用 Omega(n*m):

    ranks = dict((value, idx) for idx, value in enumerate(A))
    B.sort(key = ranks.get)
    

    写第一行的更简洁的方式是:

    ranks = dict(map(reversed, enumerate(A)))
    

    ...但我无法确定这对于公众消费是否太棘手!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-05
      • 2023-04-08
      • 1970-01-01
      • 2013-02-13
      • 2019-05-25
      • 1970-01-01
      • 2012-01-15
      • 2012-11-07
      相关资源
      最近更新 更多