我使用列表理解来映射一个要么返回值要么不返回值的函数
我的函数看起来是这样的(这是非常简单的,只是给你一个大概的想法)
def convertline(x):
if x == 'undesirablevalue':
return None
else:
# do some logic
# do some logic
# do some logic
return somecalculatedvalue
我让它在列表理解中迭代列表,就像这样。为了过滤掉非,我使用了一个列表
items = [convertline(line) for line in sample2.splitlines()]
items = [x for x in items if x is not None]
但是上面的代码看起来很庞大。 我意识到我也可以这样做:
items = [convertline(line) for line in sample2.splitlines() if convertline(line) is not None]
但这似乎有点混乱,我也做了两次数学题。有没有更好、更优雅的方法?这两种解决方案似乎都有点笨重。谢谢
你原来的方法真的没什么错。我非常喜欢它,而不是两次调用函数的方法,这看起来绝对是浪费,特别是如果它做了很多工作的话
如果您正在使用>=Python3.8中,可以使用赋值表达式:
或者,下面使用
map
的函数只执行一次传递,不构建中间列表:你可以用另一种方式:
在我看来,返回
None
的函数有点奇怪相关问题 更多 >
编程相关推荐