在Python 3.x中聚合没有嵌套循环的嵌套列表

Mad*_*tts 1 python lambda python-3.x

我准备进入python的3.5 lambda表示法,我想知道嵌套循环可以简单地用lambda one-liner代替.例如:我有这个简单的虚拟类层次结构:

class Resource:
    def __init__(self, name="foo"):
        self.name = name

class Course:
    def __init__(self):
        self.resources = list()

class College:
    def __init__(self):
        self.courses = list()
Run Code Online (Sandbox Code Playgroud)

我有一个实例CollegeCoursesResources我的出发点.

college = College()
Run Code Online (Sandbox Code Playgroud)

现在,如果我想要我list的所有内容Resources,我College可以轻松地用2做for-loops:

all_resources = list()
for course in  college.courses:
    for resource in course.resources:
        all_resources.append(resource)
Run Code Online (Sandbox Code Playgroud)

这确实很简单,但我想知道我是否也可以通过这样做来实现这一点:

all_resources = list(map(lambda r: r, [c.resources for c in college.courses]))
Run Code Online (Sandbox Code Playgroud)

但不幸的是这给了我一个listlists,而不是listResources,我想实现.lambda适合这样的东西吗?对于像这样的手术来说,最蟒蛇的方式是什么?

hol*_*web 6

首先,请通过调用停止创建空列表list()- 使用文字空列表更简单快捷[](timeit如果你不相信我,请用这个清单).

其次,绝对不需要lambda用来创建你想要的列表.一个简单的列表理解将完成这项工作:

all_resources = [r for r in course.resources for course in college.courses]
Run Code Online (Sandbox Code Playgroud)

不要过度思考它.保持尽可能简单.