Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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中返回元组列表中最高的6个名称_Python_List_Tuples - Fatal编程技术网

在Python中返回元组列表中最高的6个名称

在Python中返回元组列表中最高的6个名称,python,list,tuples,Python,List,Tuples,请告诉我,我想从下面的元组列表中返回具有最高对应整数的前6个名称(仅名称)。 我已经能够返回所有的名字从最高(短信)到最低(老板) 谢谢。如果数据已经排序,只需将前六个元组切掉,然后获得名称: first_six = data[0:6] # or data[:6] only_names = [entry[0] for entry in first_six] 列表可展开为: only_names = [] for entry in first_six: only_names.appen

请告诉我,我想从下面的元组列表中返回具有最高对应整数的前6个名称(仅名称)。 我已经能够返回所有的名字从最高(短信)到最低(老板)


谢谢。

如果数据已经排序,只需将前六个元组切掉,然后获得名称:

first_six = data[0:6]  # or data[:6]
only_names = [entry[0] for entry in first_six]
列表可展开为:

only_names = []
for entry in first_six:
    only_names.append(entry[0])
如果列表尚未排序,则可以使用
排序
方法的
关键字参数(或内置的
排序
按分数排序:

data.sort(key=lambda entry: entry[1], reverse=True)
lambda
是一个匿名函数-等效函数为:

def get_score(entry):
    return entry[1]

data.sort(key=get_score, reverse=True)
其中包括:

  • sorted
    返回使用
    函数排序的数据。由于标准排序顺序是从升序开始的,
    reverse=True
    将其设置为降序
  • lambda x:x[1]
    是一个匿名函数,返回参数的第二个元素(在本例中是元组的第二个元素)
    itemgetter(1)
    是更好的方法,但需要额外的导入
  • [0:6]
    对列表的前6个元素进行切片
  • [x[0]for x in…]
    创建每个传递元组的第一个元素列表
heapq.nlargest
是您在这里想要的:

import heapq
from operator import itemgetter
largest_names = [x[0] for x in heapq.nlargest(6,your_list,key=itemgetter(1))]
它将比排序更有效,因为它只接受最大的元素,而丢弃其余的元素。当然,如果由于其他原因对列表进行了预排序,那么它的效率不如切片

复杂性:

  • heapq:O(N)
  • 排序:O(NlogN)
  • 切片(仅在预排序时):O(6)
说明:

heapq.nlargest(6,your_list,key=itemgetter(1)) 
此行返回(名称、值)元组列表,但只有6个最大的元组——比较由元组中的第二个(index=1-->
key=itemgetter(1)
)元素完成

该行的其余部分是对6个最大名称、值元组的列表理解,该元组仅获取元组的名称部分并将其存储在列表中


您可能感兴趣的是,您还可以将此数据存储为
collections.Counter

d = collections.Counter(dict(your_list))
biggest = [x[0] for x in d.most_common(6)]

仅仅为了进行此计算可能不值得转换(这毕竟是heapq的用途;-),但为了使数据更易于使用,可能值得转换。

如果您能解释一下您的代码,那就太好了。初学者可能很难理解发生了什么。
heapq.nlargest(6,your_list,key=itemgetter(1)) 
d = collections.Counter(dict(your_list))
biggest = [x[0] for x in d.most_common(6)]