我有一个由tags
和weights
对组成的数据结构,如下所示:
tags = [['male vocalists', 4], ['Lo-Fi', 2], ['pop underground', 2], ['pop', 16], ['power pop', 99], ['post rock', 2], ['alternative', 59], ['electronic', 2], ['classic rock', 2], ['alternative rock', 14], ['pop rock', 2], ['baroque pop', 2], ['powerpop', 4], ['melodic', 2], ['seen live', 62], ['Bellshill', 3], ['singer-songwriter', 2], ['Favourites', 2], ['Teenage Fanclub', 4], ['emo', 2], ['glasgow', 12], ['Scottish', 73], ['indie pop', 27], ['indie', 100], ['00s', 3], ['new wave', 3], ['rap', 2], ['ambient', 2], ['brit pop', 2], ['90s', 14], ['britpop', 26], ['indie rock', 68], ['electronica', 2], ['shoegaze', 5], ['scotland', 11], ['post-punk', 3], ['Alt-country', 2], ['80s', 3], ['jangle pop', 7], ['guitar pop', 4], ['Pop-Rock', 2], ['rock', 31], ['favorites', 2], ['creation records', 3], ['All', 2], ['punk', 3], ['scottish pop', 2], ['british', 17], ['scottish indie', 2], ['slowcore', 2], ['UK', 6], ['jangly', 2]]
我知道我可以通过以下方式获得具有最高值的标签:
top = max(tags, key=lambda x:x[1])[0]
正确地产生indie
。你知道吗
但是如何得到N的最大值,比如说,5?你知道吗
heapq
让你做一些非常酷的事情,比如:使用^{} :
或者如果你只对名字感兴趣:
从降序排序中切分前5个元素。你知道吗
MSeifert的答案在算法上技术上更好。如果有一个大的长度列表
n
和相对较少的元素数来获取m
,那么heapq.largest
可能会更快,因为它需要O(n * log m)
时间,而排序然后切片则需要O(n * log n)
。(有关heapq.largest
算法的大致轮廓,请参见here)。再说一遍,日志几乎可以忽略不计,所以一定要测试性能是否是您关心的问题!你知道吗相关问题 更多 >
编程相关推荐