如何只获取列表的最后k个元素

时间:2014-05-05 00:51:52

标签: python dictionary

我有一个包含单词的列表,并且没有使用它的次数。所以它看起来像这样 -

[...............(u'This', 90), (u'is', 98), (u'an', 103), (u'example', 110)]

我只想要此列表的最后k个条目。在上面的例子中,考虑到之前有很多条目,我只对最后4个条目感兴趣。我想将它们传递到我的网页。我如何获得最后的k个条目?

2 个答案:

答案 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

一样多