首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Python-2.7打印出的特定结果中选择

从Python-2.7打印出的特定结果中选择
EN

Stack Overflow用户
提问于 2015-01-24 01:00:48
回答 1查看 57关注 0票数 0

我希望从下面的打印代码中获取最新的三个(基于时间的)列表。这些不是实际文件,而是解析并存储在字典中的文本:

代码语言:javascript
复制
list4 = sorted(data1.values(), key = itemgetter(4))
    for complete in list4:
        if complete[1] == 'Completed':
            print complete

返回:

代码语言:javascript
复制
['aaa664847', ' Completed', ' location' , ' mode', ' 2014-xx-ddT20:00:00.000']
['aaa665487', ' Completed', ' location' , ' mode', ' 2014-xx-ddT19:00:00.000']
['aaa661965', ' Completed', ' location' , ' mode', ' 2014-xx-ddT18:00:00.000']
['aaa669696', ' Completed', ' location' , ' mode', ' 2014-xx-ddT17:00:00.000']
['aaa665376', ' Completed', ' location' , ' mode', ' 2014-xx-ddT16:00:00.000']

我试图将这些结果附加到另一个列表中:

代码语言:javascript
复制
[['aaa664847', ' Completed', ' location' , ' mode', ' 2014-xx-ddT20:00:00.000']]
[['aaa665487', ' Completed', ' location' , ' mode', ' 2014-xx-ddT19:00:00.000']]

我想要一个清单,然后我可以使用-3:打印出三个最近的。

代码语言:javascript
复制
storage = [['aaa664847', ' Completed', ' location' , ' mode', ' 2014-xx-ddT20:00:00.000'],['aaa665487', ' Completed', ' location' , ' mode', ' 2014-xx-ddT19:00:00.000']]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-24 01:05:10

所以,

代码语言:javascript
复制
import itertools

storage = list(itertools.islice((c for c in list4 if c[1]=='Completed'), 3))

也许.

补充说:一个解释可能会有帮助。(c for c in list4 if c[1]=='Completed')部分是一个生成器表达式("genexp") --它从一开始就遍历list4,并且只一次产生满足条件的项(子列表)。

它周围的()是必需的,因为itertools.islice需要另一个参数( genexp必须始终被括号包围,但是当它是可调用的唯一的参数时,调用可调用的括号就足够了,不需要重复使用)。

islice被告知(通过其第二个参数)只产生作为第一个参数的可迭代性的前三个项。一旦它完成,它停止循环,不再做进一步的工作(这将是无用的)。

我们确实需要在这一切上调用list,因为我们因此需要一个列表,而不是迭代器(这就是islice的结果)。

对生成器和迭代器感到不舒服的人可能会选择以下不那么优雅、性能可能较差但更简单的方法:

代码语言:javascript
复制
storage = []
for c in list4:
    if c[1]=='Completed':
        storage.append(c)
        if len(c) == 3: break

这也是完全有效的Python (如果不是更早的话,它可以很好地工作到Python1.5.4)。但在适用的情况下,现代Python的使用更倾向于生成器、迭代器和itertools

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

https://stackoverflow.com/questions/28121158

复制
相关文章

相似问题

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