2024-09-28 21:33:26 发布
网友
我想从下面的元组列表中返回前6个名称(只返回名称)以及对应的最高整数。 我已经能够返回所有的名字从最高(短信)到最低(老板)。在
[('sms', 10), ('bush', 9), ('michaels', 7), ('operations', 6), ('research', 5), ('code', 4), ('short', 3), ('ukandu', 2), ('technical', 1), ('apeh', 1), ('boss', 1)]
谢谢。在
data=[('sms', 10), ('bush', 9), ('michaels', 7), ('operations', 6), ('research', 5), ('code', 4), ('short', 3), ('ukandu', 2), ('technical', 1), ('apeh', 1), ('boss', 1)] return [x[0] for x in sorted(data, key=lambda x: x[1], reverse=True)[0:6]]
其功能如下:
sorted
key
reverse=True
lambda x: x[1]
itemgetter(1)
[0:6]
[x[0] for x in ... ]
heapq.nlargest这是您想要的:
heapq.nlargest
import heapq from operator import itemgetter largest_names = [x[0] for x in heapq.nlargest(6,your_list,key=itemgetter(1))]
它将比排序更有效,因为它只接受最大的元素而丢弃其余的元素。当然,如果由于其他原因对列表进行了预排序,那么它的效率不如切片。在
复杂性:
说明:
这行返回(name,value)元组的列表,但是只有最大的6个元组比较由元组中的第二个(index=1>;key=itemgetter(1))元素完成。在
key=itemgetter(1)
它只存储一个tuples的最大值的一部分。在
您可能感兴趣的是,您也可以将此数据存储为collections.Counter。在
collections.Counter
仅仅为了进行这种计算而进行转换可能不值得(这毕竟是heapq的目的;-),但是为了使数据更易于处理,可能值得进行转换。在
如果数据已经排序,只需将前六个元组切掉,然后获得名称:
first_six = data[0:6] # or data[:6] only_names = [entry[0] for entry in first_six]
列表理解可以展开到:
如果列表已排序,则可以使用sort方法的key关键字参数(或内置的sorted)按分数排序:
sort
lambda是一个匿名函数-等效函数是:
lambda
def get_score(entry): return entry[1] data.sort(key=get_score, reverse=True)
其功能如下:
sorted
返回使用key
函数排序的数据。由于标准排序顺序是从升序开始的,reverse=True
将其设置为降序lambda x: x[1]
是匿名函数,它返回参数的第二个元素(在本例中是元组的);itemgetter(1)
是更好的方法,但需要额外的导入[0:6]
将列表的前6个元素切片[x[0] for x in ... ]
创建每个传递元组的第一个元素的列表heapq.nlargest
这是您想要的:它将比排序更有效,因为它只接受最大的元素而丢弃其余的元素。当然,如果由于其他原因对列表进行了预排序,那么它的效率不如切片。在
复杂性:
说明:
^{pr2}$这行返回(name,value)元组的列表,但是只有最大的6个元组比较由元组中的第二个(index=1>;
key=itemgetter(1)
)元素完成。在它只存储一个tuples的最大值的一部分。在
您可能感兴趣的是,您也可以将此数据存储为
^{3}$collections.Counter
。在仅仅为了进行这种计算而进行转换可能不值得(这毕竟是heapq的目的;-),但是为了使数据更易于处理,可能值得进行转换。在
如果数据已经排序,只需将前六个元组切掉,然后获得名称:
列表理解可以展开到:
^{pr2}$如果列表已排序,则可以使用
^{3}$sort
方法的key
关键字参数(或内置的sorted
)按分数排序:lambda
是一个匿名函数-等效函数是:相关问题 更多 >
编程相关推荐