Python - 如何对列表中的整数进行排序,并找出每个值在原始列表中的位置

时间:2017-11-20 20:16:35

标签: python list sorting

我的问题比这更复杂,但基本上我有一个分数列表(我将它简化为6),我需要对它们进行排序,然后摆脱最低分。然而,由于这个分数对应于一个人,我需要该程序来确定哪个分数来自哪个人(让我们称他们为A,B,C,D,E,F)。例如:

scores = [6,2,5,3,5,8] #this corresponds to persons A, B, C, D, E, F in order
scores.sort()

所以现在我将有一个排序列表。我已经弄明白谁得分最低,但我怎么知道哪个人对应?

或者,有没有办法可以通过检查未排序列表中的每个值来查看它是否是最低值来强制它?那也没关系。

6 个答案:

答案 0 :(得分:2)

最简单的方法:从scores开始一起列出interleave(zip)列表并对元组进行排序。

scores = [6,2,5,3,5,8]
persons =['A','B','C','D','E','F']

print(sorted(zip(scores,persons)))

注意:您不必为sort使用特殊键功能。因此,如果2个人有一个给定的分数,那么该人名将成为决胜局。

结果:该列表包含与相应人员的排序分数

[(2, 'B'), (3, 'D'), (5, 'C'), (5, 'E'), (6, 'A'), (8, 'F')]

[x[1] for x in sorted(zip(scores,persons))]

仅返回人员列表(已删除分数)

答案 1 :(得分:1)

使用zip,按lambda排序,降至最低:

<filesMatch "\.(html|htm|js|css)$">
  FileETag None
  <ifModule mod_headers.c>
     Header unset ETag
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
     Header set Pragma "no-cache"
     Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
  </ifModule>
</filesMatch>

编辑(Jean-François Fabre

带来的非常好的观点

如果你这样做(得分优先)(==&gt;这是Jean-François答案)

pers = "ABCDEF"
scores = [6,2,5,3,5,8]

zipped = sorted(zip(pers,scores), key=lambda x: x[1]) [1:]
print(zipped)

输出将按元组中的第一项排序,一个不需要键或lambda - 最低音符上的平局将由第二个元组(名称)解析 - 按字母顺序排列的低位将被踢: /对Artner的不公平

输出:

pers = "ABCDEF"
scores = [6,2,5,3,5,8]

zipped = sorted(zip(scores,pers)) [1:]
print(zipped)

答案 2 :(得分:0)

最好的方法可能是构造带有索引和值的元组。我们可以使用enumerate(..)

来完成此操作
from operator import itemgetter

sorted_list = sorted(enumerate(data), key=itemgetter(1))

现在sorted_list将包含作为第一项的元组,原始索引,以及作为第二项的相应值:

>>> sorted(enumerate(scores), key=itemgetter(1))
[(1, 2), (3, 3), (2, 5), (4, 5), (0, 6), (5, 8)]

但是,如果您想要按特定条件获取最小元素,则可以使用min(..)并使用key。例如:

worst_student = min(students, key=lambda s: s.score)

如果您想按分数对学生进行排序,我们也可以将其用作key的{​​{1}}:

sorted

答案 3 :(得分:0)

首先应使用字典,而不是按惯例对应的两个列表。

>>> people = ['A', 'B', 'C', 'D', 'E', 'F']
>>> scores = [6,2,5,3,5,8]
>>> 
>>> p2s = dict(zip(people, scores))
>>> p2s
{'A': 6, 'C': 5, 'B': 2, 'E': 5, 'D': 3, 'F': 8}
>>> 
>>> lowest = min(p2s.values())
>>> worst = [p for p in people if p2s[p] == lowest]
>>> worst
['B']

拥有worst的列表是设计使然,因为可能会有几个人分享得分最低。

答案 4 :(得分:0)

尝试使用:

for i in sorted(scores):
    index = score.index(i)
    # then do whatever you want with index

答案 5 :(得分:0)

简单明了:

Hello Charles with Montesquieu