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(',')