gpt4 book ai didi

Python:展平对象列表

转载 作者:太空宇宙 更新时间:2023-11-04 08:00:13 25 4
gpt4 key购买 nike

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

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?)

关于Python:展平对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41521431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com