用于加入列表的Python列表理解(展平)

时间:2013-12-04 19:09:15

标签: python list list-comprehension mongoengine

所以我目前正在使用mongoengine,虽然任何具有属性的东西都会有相同的行为。

我有一个名为集合的列表。从技术上讲,它是一个mongoengine QuerySet,它是一个可迭代的,但它实际上与列表具有相同的行为。

每个元素集合都是一个对象,其属性名为 addons ,也是一个列表。

我想创建所有插件的平面列表。目前这样做会产生预期的结果

addons = []
for col in collections:
    addons+=col.addons

但是当我尝试这个时,我假设是等同的列表理解,我得到一个列表列表(它基本上每个列表附加在一起而不是添加它们)

addons = [col.addons for col in collections]

我一直在阅读有关嵌套列表理解甚至使用itertools的内容,但还未能弄清楚如何正常工作

2 个答案:

答案 0 :(得分:1)

你需要双重列表理解,例如:

addons = [item for item in col.addons for col in collections]

答案 1 :(得分:1)

你可以这样使用itertools.chain.from_iterable

from itertools import chain
addons = list(chain.from_iterable(col.addons for col in collections))

适用于Python> = 2.6。在过去,它一直很快。甚至比双重列表理解还要快。