Python:展平对象列表

Python:展平对象列表,python,python-2.7,list,flatmap,Python,Python 2.7,List,Flatmap,我有一个对象列表,每个对象都有一个其他对象类型的列表。我想提取这些列表并创建另一个对象的新列表 List1:[Obj1, Obj2, Obj3] Obj1.myList = [O1, O2, O3] Obj2.myList = [O4, O5, O6] Obj3.myList = [O7, O8, O9] 我需要这个: L=[O1,O2,O3,O4,…,O9] 我尝试了extend()和reduce()但没有成功 bigList = reduce(lambda acc, slice: acc

我有一个对象列表,每个对象都有一个其他对象类型的列表。我想提取这些列表并创建另一个对象的新列表

List1:[Obj1, Obj2, Obj3]

Obj1.myList = [O1, O2, O3]
Obj2.myList = [O4, O5, O6]
Obj3.myList = [O7, O8, O9]
我需要这个:

L=[O1,O2,O3,O4,…,O9]

我尝试了
extend()
reduce()
但没有成功

bigList = reduce(lambda acc, slice: acc.extend(slice.coresetPoints.points), self.stack, [])
附言


寻找python展平列表没有帮助,因为我得到了其他对象的列表。

不完全是火箭科学:

List1:[Obj1, Obj2, Obj3]

Obj1.myList = [O1, O2, O3]
Obj2.myList = [O4, O5, O6]
Obj3.myList = [O7, O8, O9]
L = []
for obj in List1:
    L.extend(obj.myList)

使用
itertools.chain
(或者更好地使用
itertools.chain.from\u iterable
,如niemmi所述),避免创建临时列表和使用
extend

import itertools
print(list(itertools.chain(*(x.myList for x in List1))))
或者(更清晰、更快速):

小型可复制试验:

class O:
    def __init__(self):
        pass

Obj1,Obj2,Obj3 = [O() for _ in range(3)]

List1 = [Obj1, Obj2, Obj3]

Obj1.myList = [1, 2, 3]
Obj2.myList = [4, 5, 6]
Obj3.myList = [7, 8, 9]

import itertools
print(list(itertools.chain.from_iterable(x.myList for x in List1)))
结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
(用于展平列表的所有配方:)

list.extend()
返回
None
,而不是列表。您需要在lambda函数中使用串联,以便函数调用的结果是一个列表:

bigList = reduce(lambda x, y: x + y.myList, List1, [])
虽然这在
reduce()
中是可行的,但使用列表理解将更快、更具python风格:

bigList = [x for obj in List1 for x in obj.myList]

您可以通过一行代码实现这一点:

[i for obj in List1 for i in obj.myList]