Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为列表中的3个最高值编制索引?_Python - Fatal编程技术网

Python 如何为列表中的3个最高值编制索引?

Python 如何为列表中的3个最高值编制索引?,python,Python,因此,我有以下两个列表: score = [350, 914, 569, 223, 947, 284, 567, 333, 697, 245, 227, 785, 120, 794, 343, 773, 293, 995] name = [Ryan, Stacy, Jenna, Peter, Sophie, Bryan, Cole, Andrea, Emily, Blake, Mike, Stephan, Rob, Eliza, Heather, Daniel, Elisabeth, Saman

因此,我有以下两个列表:

score = [350, 914, 569, 223, 947, 284, 567, 333, 697, 245, 227, 785, 120, 794, 343, 773, 293, 995]
name = [Ryan, Stacy, Jenna, Peter, Sophie, Bryan, Cole, Andrea, Emily, Blake, Mike, Stephan, Rob, Eliza, Heather, Daniel, Elisabeth, Samantha]
我必须找到3个最高分,并将这些分数与名单中各自的得分者进行统计,这样我才能有新的名单

top3score = [947, 995, 914]
top3name = [Sophie, Samantha, Stacy]
我正在考虑为最高分数编制索引,将其添加到列表中,而不是使用索引将这些分数与姓名进行排序

我的问题是如何为列表中的3个最高值编制索引?
然后,如何使用索引在姓名列表中查找记分员姓名,以便将他们添加到TOP3姓名列表中?

我想这样就可以了

sorted(zip(score, name), reverse=True)[:3]
所以你知道发生了什么:

:将iterable作为参数,并从每个iterable中提取一个元素,将它们放置在元组中

因此:

:将对数据进行排序。默认情况下,元组元素按0索引中的元素排序,因此本例中的分数为。Reverse=True将首先按降序排序


最后,
[:3]
是切片表示法,表示从头到尾给我所有元素。这也可以写成
[0:3]

如果您只对前三名感兴趣,则有:

从:

heapq.nlargest(n,iterable,key=None)

从iterable定义的数据集中返回一个包含n个最大元素的列表。key(如果提供)指定一个参数的函数,用于从iterable中的每个元素提取比较键:
key=str.lower
等效于:
sorted(iterable,key=key,reverse=True)[:n]

绩效通知:

后两种[
nlargest
nsmalest
]对于较小的n值表现最好。对于较大的值,使用
sorted()
函数更有效。另外,当
n==1
时,使用内置的
min()
max()
函数更有效


错误的数据结构。您应该使用类似于
的dict
>>> zip(score, name)
[(350, 'Ryan'), (914, 'Stacy'), (569, 'Jenna'), (223, 'Peter'), (947, 'Sophie'), (284, 'Bryan'), (567, 'Cole'), (333, 'Andrea'), (697, 'Emily'), (245, 'Blake'), (227, 'Mike'), (785, 'Stephan'), (120, 'Rob'), (794, 'Eliza'), (343, 'Heather'), (773, 'Daniel'), (293, 'Elisabeth'), (995, 'Samantha')]
>>> heapq.nlargest(3, zip(score, name))
[(995, 'Samantha'), (947, 'Sophie'), (914, 'Stacy')]