按照A列表的排序方式对B列表进行排序?

3
假设我有一个包含k个元素的列表A,还有一个同样有k个元素的列表B。我想要对列表A进行排序,同时也想以相同的方式对列表B进行排列。
例如:
A = [2,3,1,4]
B = [5,6,7,8]

排序后的A:

A = [1,2,3,4]
B = [7,5,6,8]

2
可能是根据另一个列表中的值对列表进行排序?的重复问题。 - buydadip
1
@Bolboa:并不完全是重复,因为这个问题要求保留AB两个变量。另一个问题没有涉及到这一点。 - NPE
@NPE 我明白了,也许你是对的。 - buydadip
2个回答

11

这里有一种方法:

>>> A = [2,3,1,4]
>>> B = [5,6,7,8]
>>> A, B = zip(*sorted(zip(A, B)))
>>> list(A)
[1, 2, 3, 4]
>>> list(B)
[7, 5, 6, 8]

简而言之:

  • AB 打包成一对列表;
  • 对这些列表进行排序;
  • 解压缩回到 AB
  • 将元组转换为列表。

如果你喜欢一行代码:

A, B = map(list, zip(*sorted(zip(A, B))))

1
@MyNameIsKhan:zip(*)可以撤销第一个zip:https://dev59.com/1mYr5IYBdhLWcg3wfaMA - NPE

2
您可以尝试像这样做:

您可以尝试以下操作:

>>> A = [2,3,1,4]
>>> B = [5,6,7,8]
>>>
>>> AB = zip(A, B)
>>> AB.sort()
>>> A[:] = [t[0] for t in AB]
>>> B[:] = [t[1] for t in AB]
>>> A
[1, 2, 3, 4]
>>> B
[7, 5, 6, 8]

我们所做的只是对列表进行“压缩”(例如:在您的示例中:[(2,5),(3,6),(1,7),(4,8)]),并按每个元组的第一个元素对该列表进行排序。然后从这个排序好的列表中检索所需的AB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接