我想将此代码转换为列表理解:
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)
答案 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]