如何在条件列表推导中使用函数调用结果?

时间:2016-03-15 05:22:11

标签: python-3.x list-comprehension

我想将此代码转换为列表理解:

JSONObject jsonObject = new JSONObject(jsonResult);
JSONArray detailsArray = jsonObject.getJSONArray("Details");

String status = dataArray.getJSONObject(0).getString("status");

 Toast.makeText(getBaseContext(), "Please wait...",100+status).show();

这意味着我只想将truthy l = list() for i in range(10): j = fun(i) if j: l.append(j) 结果值添加到列表中。如果没有对该函数调用的真实检查,列表理解将是:

fun()

在列表推导中添加l = [fun(i) for i in range(10)] 将导致每次迭代if fun(i)的两次评估(实际上,似乎并非总是如此!),因此如果fun()不纯,则会导致意外的副作用

我可以捕获fun()的结果并在相同的理解中使用它,实质上是添加fun(i)吗? (相关问题here

3 个答案:

答案 0 :(得分:1)

你可以在列表中创建一个内部生成器,这样你就可以查看func

的结果
l = [j for j in (func(i) for i in range(10)) if j]

答案 1 :(得分:0)

或者结合两个建议的解决方案:

$first

答案 2 :(得分:0)

修改

更简单:

[res for res in map(func, range(10)) if res]

感谢falstru的暗示。

旧答案

另一种选择是使用辅助生成器函数:

def call_iter(func, iterable):
    for arg in iterable:
        yield func(arg)

[res for res in call_iter(func, range(10)) if res]