我有一个包含单词的列表,并且没有使用它的次数。所以它看起来像这样 -
[...............(u'This', 90), (u'is', 98), (u'an', 103), (u'example', 110)]
我只想要此列表的最后k个条目。在上面的例子中,考虑到之前有很多条目,我只对最后4个条目感兴趣。我想将它们传递到我的网页。我如何获得最后的k个条目?
答案 0 :(得分:3)
使用切片并从负数索引处开始:
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-4:]
[7, 8, 9, 10]
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-1:]
[10]
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10][-9:]
[2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>
如果您在序列之后放置[-k:]
,它将返回最后k
项(假设序列中至少有k
个项目。)
答案 1 :(得分:2)
如果您对减少big-O时间复杂度感兴趣,可以使用heapq而不是sort O(n)
解决方案(n = len(L))
import heapq
from operator import itemgetter
W = wordDict.iteritems()
m = 4
heapq.nlargest(m, W, key=itemgetter(1)) # last m items biggest to smallest
heapq.nlargest(m, W, key=itemgetter(1))[::-1] # last m items smallest to biggest
在实践中,你可能会发现Python的排序比heapq更快,直到你得到真正庞大的词典,但这只是因为heapq
没有被调整和sorted