Skip to main content
 首页 » 编程设计

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

2025年05月04日10powertoolsteam

我即将进入 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] 

不要想太多。尽可能保持简单。