真的很容易python对峙

时间:2012-09-16 14:57:58

标签: python

我觉得不能解决这样的问题真的很蠢,但我指的是空白。我需要提出一个简短而优雅的方法来做到这一点,出于某种原因我不能!

这个概念非常简单

我有一个[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:

3 个答案:

答案 0 :(得分:5)

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

result = [x[1] for x in sorted(zip(order, people))]

答案 1 :(得分: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']

答案 2 :(得分:2)

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