我即将进入 python 的 3.5 lambda 表示法,我想知道嵌套循环是否可以简单地用 lambda 单行代码替换。 例如。: 我有这个简单的虚拟类层次结构:
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()
我有一个 College 实例,其中包含多个 Courses 和 Resources 作为我的起点。
college = College()
现在,如果我想要一个包含College 中所有Resources 的列表,我可以使用2 个for 循环轻松实现:
all_resources = list()
for course in college.courses:
for resource in course.resources:
all_resources.append(resource)
这确实很简单,但我想知道我是否也可以通过这样做来实现:
all_resources = list(map(lambda r: r, [c.resources for c in college.courses]))
但不幸的是,这给了我一个 listof lists 而不是 listof Resources,这是我想要的实现。 lambda 适合这样的事情吗? 对于这样的操作,最符合 Python 风格的方法是什么?
请您参考如下方法:
首先,请停止通过调用 list() 创建空列表——使用文字空列表 [] 既简单又快捷(用 timeit 如果你不相信我)。
其次,完全没有必要使用lambda 来创建您想要的列表。一个简单的列表理解就可以完成这项工作:
all_resources = [r for r in course.resources for course in college.courses]
不要想太多。尽可能保持简单。
