Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将条件for循环转换为列表理解?_Python_List Comprehension - Fatal编程技术网

Python 如何将条件for循环转换为列表理解?

Python 如何将条件for循环转换为列表理解?,python,list-comprehension,Python,List Comprehension,我有一个for循环,带有if条件,我想将其转换为列表理解,循环如下所示 if options.accounts.lower() == "all": orgPaginator = org.get_paginator('list_accounts_for_parent') for orgPages in orgPaginator.paginate(ParentId=src_ou_id): for account in orgPages['Accou

我有一个
for
循环,带有
if
条件,我想将其转换为列表理解,循环如下所示

if options.accounts.lower() == "all":
    orgPaginator = org.get_paginator('list_accounts_for_parent')
    for orgPages in orgPaginator.paginate(ParentId=src_ou_id):
        for account in orgPages['Accounts']:
            acc.append(account["Id"])
else:
    for account in options.accounts.split(','):
        acc.append(account)
这就是我现在所拥有的,我可以理解其他部分,但是我在转换第一部分时遇到了问题

[<??> if options.accounts.lower() == "all" else acc.append(account) for account in options.accounts.split(',')]
[if options.accounts.lower()==“all”else acc.append(account)for options.accounts.split(',')]
有人能提供一些关于如何转换第一部分的指导,并给出解释吗

if options.accounts.lower() == "all":
    acc += [account["Id"] for account in [orgPages["Accounts"] for orgPages in org.get_paginator('list_accounts_for_parent').paginate(ParentId=src_ou_id)]]
else:
    acc += [account for account in options.accounts.split(',')]
这应该可以做到。如果可能的话,我不认为单纯的列表理解方法会更好

您的
似乎就是您实际想要放在列表中的内容:

[f(x) for x in iterable]
在这种情况下,f(x)将是x[…]。

我/我们可以将其设置为(编辑:在@ShadowRanger的帮助下):


我真的不想把它作为一个理解列表来写。它可能几乎不可读,尤其是因为
if
的一个分支有两个嵌套循环,而另一个只有一个。这不是列表理解material@Nick:两个列表的理解都很好,如果@ShadowRanger我不是想说它做不到,只是一个列表理解可能是不可理解的:)为什么你想把它转换成列表理解?感谢你的关注,我尝试了
acc+=[帐户[“Id”]对于[orgPages[“Accounts”]中的帐户,对于orgPages在org.get\u paginator('list\u Accounts\u for\u parent')]
但这会引发此错误
错误!运行时出现未捕获异常:“Organizations.Paginator.ListAccountsForParent”对象不可编辑
my bad,我忘了复制您的一些代码。。。现在应该可以工作了它现在抛出一个diff错误
错误!运行中未捕获的异常:列表索引必须是整数或切片,而不是str
我认为是帐户[“Id”]导致了问题
acc+=[options.accounts.split(‘,’)]
实际上应该是
acc+=options.accounts.split(‘,’)
str.split
已经返回了一个
list
,即使它返回了一些其他的iterable,也没关系,因为
list
+=
处理任意iterable。
[a代表options.accounts.split(',')]
可以是
options.accounts.split(',)
,不需要listcomp。和
[a代表a in(p['Accounts']代表p in org.get_paginator('list_Accounts_for u parent').paginate(ParentId=src_ou_id))
应该是
[p['Accounts']代表p in org.get_paginator('list_Accounts_for u for u parent').paginate(ParentId=src_ou id)]
(为什么要在genexpr周围使用一个无操作列表组件,而它可以是一个单独的列表组件来完成工作?。@ShadowRanger是的,当然-愚蠢的我-谢谢。
acc += [p['Accounts'] for p in org.get_paginator('list_accounts_for_parent').paginate(ParentId=src_ou_id)] \
        if options.accounts.lower() == "all" else \
        options.accounts.split(',')