Python &引用;“展平”;包含列表列表的列表到列表列表
这个问题不同于(这会产生一组非常具体的回答,而这些回答并不针对我的情况),也不同于许多“从一个列表到另一个列表”的答案 我想要一个列表,其中一些是列表列表,然后“展平”为列表列表(不仅仅是列表!) 作为一个具体的例子,我想从以下几点开始:Python &引用;“展平”;包含列表列表的列表到列表列表,python,list,Python,List,这个问题不同于(这会产生一组非常具体的回答,而这些回答并不针对我的情况),也不同于许多“从一个列表到另一个列表”的答案 我想要一个列表,其中一些是列表列表,然后“展平”为列表列表(不仅仅是列表!) 作为一个具体的例子,我想从以下几点开始: my_list_of_list=[[1,2,3]、[9,10]、[8,9,10]、[3,4,6]、[11,12,13]] 对此 target_list_of_list=[[1,2,3]、[9,10]、[8,9,10]、[3,4,6]、[11,12,13]]
my_list_of_list=[[1,2,3]、[9,10]、[8,9,10]、[3,4,6]、[11,12,13]]
对此
target_list_of_list=[[1,2,3]、[9,10]、[8,9,10]、[3,4,6]、[11,12,13]]
(从视觉上看,我想将外部列表中的所有
[[
和]
分别转换为[
和]
。这里有一种方法:
def flatten(lst, dh=None):
# Added so user does not need to pass output list
if (dh is None):
dh = []
for elem in lst:
# Will not try to iterate through empty lists
if elem and (isinstance(elem[0], list)):
flatten(elem, dh)
else:
dh.append(elem)
return dh
my_list_of_lists = [[1, 2, 3], [[9, 10], [8, 9, 10], [3, 4, 6]], [11, 12, 13]]
target_list_of_lists = flatten(my_list_of_lists)
print(target_list_of_lists)
输出:
[[1, 2, 3], [9, 10], [8, 9, 10], [3, 4, 6], [11, 12, 13]]
这适用于任何长度和深度的列表。我认为建议的副本不正确,因为这个问题不想完全展平列表,只需删除嵌套的某些层,同时保留其他层。可能需要添加默认值:
def flatte(lst,dh=None):#。。。dh=[]如果dh是None-else dh
并且在最后返回一个dh
,这样最终用户就不必设置输出缓冲区了?小心--您需要`=None`和条件,这样每次顶级调用都会启动一个新的列表。否则:def测试(a=[]):a.append(45);返回a;test()#=>[45];test()#=>[45,45]
:)(我们都是这样做的……前几天我花的时间比我想承认的要长……)注意,我的实际列表在列表列表列表中有[]
(例如,我的列表=[[1,2,3],[[9,10],[8,9,10],[3,4,6],[11,12,13]
)。这破坏了解决方案,但将条件更改为if elem and(isinstance(elem[0],list)):
使其工作。