Python - 迭代嵌套对象

标签 python

在 Python 中迭代嵌套对象的优雅方法是什么?我目前正在使用如下的嵌套循环。

for job in jobs:
    for task in job.tasks:
        for command in task.commands:
            print command.actual_cmd

有没有更好的方法更Pythonic?

最佳答案

您可以设置链式生成器以降低缩进级别。

iter_tasks = (task for job in jobs for task in job.tasks)
iter_commands = (command for task in iter_tasks for command in task.commands)

for command in iter_commands:
    print(command.actual_cmd)

我同意 OldBunny2800在三个嵌套循环的情况下,链接生成器在可读性方面可能不会给你带来太多好处。

如果您的嵌套逻辑比这更深,生成器就会开始变得有吸引力。不仅缩进级别得到控制,您还可以为每个生成器分配一个有意义的变量名称,有效地为 for 循环命名。

关于Python - 迭代嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62145216/

相关文章:

python - 在 python 中将聚合值拆分为不同的计数,返回新行

python - 在 Python 中使用元数据(用户 ID 和 ctime)进行归档(tar 和压缩)

python - 如何在Python中的特定行将一个txt文件注入(inject)/插入到另一个txt文件中

python - 更新 dict 值不会更新它引用的全局变量

选择第一个计算结果为 True 的变量的 Pythonic 方法

python - 输入/输出 python : Handling output and variable

python - 在 Python C API 代码中引发异常并停止执行

python - 为梯度直方图获取 0 到 180 之间无符号角度的正确方法

python - 是否有另一种方法来关闭标准输入文件描述符(当前使用 <&- with shell=True)?

python - 在数组中添加特定元素?