Skip to main content
 首页 » 编程设计

Python:展平对象列表

2025年05月04日15thcjp

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

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 展平列表列表没有帮助,因为我得到了其他对象列表的列表。

请您参考如下方法:

使用 itertools.chain(或者在这种情况下更好 itertools.chain.from_iterable ,正如 niemmi 指出的那样),这避免了创建临时列表和使用 extend

import itertools 
print(list(itertools.chain(*(x.myList for x in List1)))) 

或(更清晰且速度稍快):

print(list(itertools.chain.from_iterable(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] 

(所有用于展平列表列表的方法:How to make a flat list out of list of lists?)