在Python中合并多个for循环

4 投票
6 回答
5555 浏览
提问于 2025-04-16 15:05

假设我们有一个叫“articles”的变量,里面存放了一些对象,每个对象都有一个叫“tags”的成员(这个成员是一个简单的列表)。

我们想要的结果是:把所有文章中的标签都放在一个列表里。

如果用多行代码来写,解决方案会是:

arr = []
for article in articles:
    for tag in article.tags:
       arr.append(tag)

那么,我们怎么能把这个用一行代码写出来,而不是四行呢?

这种写法是错误的:

arr = [tag for tag in article.tags for article in articles]

谢谢!

6 个回答

4

也许

arr = [tag for tag in (a.tags for a in articles)]
5

你实际上是在按照你不想要的顺序进行循环:

你想要的是:

result = [ tag for article in articles for tag in article.tags ]

把你在例子中做的事情翻译过来就是:

for tag in article.tags:
    for article in articles:
       #code

这其实没什么意义。

11

这是不合法的,因为在第一次循环被解析的时候,article 还不存在。

arr = [tag for article in articles for tag in article.tags]

撰写回答