首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python在列表中获得最后5个元素

python在列表中获得最后5个元素
EN

Stack Overflow用户
提问于 2015-02-19 05:42:58
回答 7查看 2.4K关注 0票数 4

我有这样一个列表:[[1, 2], [4, 5, 6], [], None, [7, 12, 14, 16]]

我想编写一个将返回的函数:[16, 14, 12, 7, 6]:即列表列表中的最后5个元素。

这是我所拥有的代码,但它一点也不像奏鸣曲(master_list包含上面的列表):

代码语言:javascript
复制
    def find_last_five():
        last_five = []
        limit = 5

        for sublist in reversed(master_list):
            # have to check that list is not None.
            if sublist:
                for elem in sublist:
                    last_five.append(elem)
                    limit -= 1
                    if (limit == 0):
                         return last_five

        return last_five
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-02-19 05:51:17

代码语言:javascript
复制
import itertools as it

a = [[1, 2], [4, 5, 6], [], [7, 12, 14, 16]]
reversed(it.islice(it.chain.from_iterable(reversed(a)), 5))

这实际上是假设a中没有a,如果有do a = filter(a, None)的话。

票数 4
EN

Stack Overflow用户

发布于 2015-02-19 05:45:36

考虑到您的例子,我将假设您的列表中的项是可迭代的或None的;

代码语言:javascript
复制
>>> import itertools

>>> lst = [[1, 2], [4, 5, 6], [], None, [7, 12, 14, 16]]
>>> print list(itertools.chain(*[l for l in lst if l is not None]))[-5:]
[6, 7, 12, 14, 16]
票数 4
EN

Stack Overflow用户

发布于 2015-02-19 05:53:01

您可以使用列表理解:

代码语言:javascript
复制
>>> tgt=[[1, 2], [4, 5, 6], [], None, [7, 12, 14, 16]]
>>> [e for sub in tgt if sub for e in sub][-5:]
[6, 7, 12, 14, 16]

过滤掉None。筛选出其他非列表或元组:

代码语言:javascript
复制
>>> [e for sub in tgt if isinstance(sub, (list, tuple)) for e in sub][-5:]

如果您想要的东西不需要首先平整整个列表列表,您可以从末尾处理结构,然后向上移动,直到得到您想要的:

代码语言:javascript
复制
result=[]
current=[]
it=reversed(tgt)
while len(result)<5:
    if current:
        result.append(current.pop())
        continue
    else:
        try: 
             current=next(it)
        except StopIteration:
            break

(或者使用John 1024的solution)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28599370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档