在Python2.7中从打印输出中选择特定结果

2024-09-27 07:27:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

list4 = sorted(data1.values(), key = itemgetter(4))
    for complete in list4:
        if complete[1] == 'Completed':
            print complete

退货:

['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']

我尝试将这些结果附加到另一个列表中,得到以下结果:

[['aaa664847', ' Completed', ' location' , ' mode', ' 2014-xx-ddT20:00:00.000']]
[['aaa665487', ' Completed', ' location' , ' mode', ' 2014-xx-ddT19:00:00.000']]

我想要一个列表,然后我可以使用[-3:]打印出最近的三个。你知道吗

storage = [['aaa664847', ' Completed', ' location' , ' mode', ' 2014-xx-ddT20:00:00.000'],['aaa665487', ' Completed', ' location' , ' mode', ' 2014-xx-ddT19:00:00.000']]

Tags: 文件代码列表mode时间locationcompletexx
1条回答
网友
1楼 · 发布于 2024-09-27 07:27:17

所以

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被告知(通过它的第二个参数)只产生它作为第一个参数接收的iterable的前3项。一旦完成,它就停止循环,不再做进一步的工作(这将是无用的)。你知道吗

我们确实需要调用list,因为我们需要一个列表,而不是迭代器(这就是islice的结果)。你知道吗

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

storage = []
for c in list4:
    if c[1]=='Completed':
        storage.append(c)
        if len(c) == 3: break

这也是非常有效的Python(如果不是更早的话,它早在python1.5.4就可以正常工作了)。但是现代的Python用法更倾向于生成器、迭代器和itertools,如果适用的话。。。你知道吗

相关问题 更多 >

    热门问题