2

无法解决这样的问题,我感到非常愚蠢,但我是空白的。我需要想出一个简短而优雅的方法来做到这一点,但由于某种原因,我做不到!

这个概念很简单

我有一个清单,[4,3,5,2,1]我有五个人A, B, C, D, E

A=4 B=3 C=5 D=2 E=1

现在,我需要根据它们的数字按升序排列它们,这样它们就变成了

['E', 'D', 'B', 'A', 'C']

我真的不明白为什么我无法弄清楚这个 D:

4

3 回答 3

5
order  =  [4, 3, 5, 2, 1]
people = "ABCDE"

result = [x[1] for x in sorted(zip(order, people))]
于 2012-09-16T15:01:31.440 回答
3

您可以创建一个字典,将数字与每个“个人”相关联:

>>> a = [4, 3, 5, 2, 1]
>>> b = ["A", "B", "C", "D", "E"]
>>> d = dict(zip(b, a))
>>> d
{'A': 4, 'C': 5, 'B': 3, 'E': 1, 'D': 2}

使用此字典,您可以轻松地按值对键进行排序:

>>> sorted(d, key=d.get)
['E', 'D', 'B', 'A', 'C']
于 2012-09-16T15:04:19.303 回答
2

使用zip将两个列表组合成一个元组列表,[(A,1),(B,3),...,(E,5)]然后使用 sort 和自定义cmp方法比较数字,然后使用map将字母拉回来。

于 2012-09-16T15:00:22.997 回答