码迷,mamicode.com
首页 > 编程语言 > 详细

【Tips】Python 针对函数返回值实现列表推导

时间:2018-01-01 19:32:37      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:over   div   https   tps   span   定义函数   []   pen   ons   

背景

设想这样一个场景,我们定义函数foo来生成一个大于0的随机code。但是函数执行可能会出现异常,对于异常情况我们指定函数返回-1。

在批量处理的情况下,我们想要得到所有成功执行的foo函数的返回值集合,而忽略返回-1的情况。基本的逻辑如下:

result = []

for item in item_lst:
    code = foo(item)
    if code != -1:
        result.append(code)

 

使用列表推导的解决方案

如果想用列表推导的方式实现,有下面几种解决方案:

Solution 1:

result = [foo(item) for item in item_lst]
result = [code for code in result if code != -1]

先用列表推导获取到了函数的返回值,然后再执行一次筛选,需要执行两次列表推导。

Solution 2:

result = [foo(item) for item in item_lst if foo(item) != -1]

执行一次列表推导,但是很明显,foo函数执行了两次。如果foo函数比较耗时,或者多次执行会产生副作用的话都会有问题。

Solution 3:

result = [code for code in (foo(item) for item in item_lst) if code != -1]

使用 生成器表达式 来处理中间结果,不需要临时列表,并且是基于迭代器的,优于上面两种方法。

 

参考

  1. How to execute a filter by function return value in list comprehension?

【Tips】Python 针对函数返回值实现列表推导

标签:over   div   https   tps   span   定义函数   []   pen   ons   

原文地址:https://www.cnblogs.com/sting-roc/p/8145197.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!