使用python将列表列表添加到列表中

时间:2014-05-19 03:03:40

标签: python list

我是python的新手,并且遇到了列表理解问题。有没有办法在像这样的列表列表中扩展子记录

lst = [[0,0,0,0],[[x,x,x,x],[y,y,y,y]],[0,0,0,0],[0,0,0,0]]

我想最终得到以下列表,但我不确定如何解决问题:

lst = [[0,0,0,0],[x,x,x,x,y,y,y,y],[0,0,0,0],[0,0,0,0]]

我找到了这段代码,但我不知道如何让它在第二级"级别上运行。列表我试过这个:

print([x for y in lst for x in y]) enter image description here

2 个答案:

答案 0 :(得分:0)

只需浏览每个元素,如果它的长度为2(这意味着它是甜甜圈),请将该子列表的两个元素添加到一起。

def flatten(data):
    new_data = [lists[0]+lists[1] if len(lists) == 2 else lists for lists in data]
    return new_data

data = [[1, 2, 3, 4], [[5, 6, 7, 8], [9, 10, 11, 12]], [13, 14, 15, 16]]
new_data = flatten(data)

答案 1 :(得分:0)

对于给出的示例,您可以执行以下操作:

x,y=1,2
lst = [[0,0,0,0],[[x,x,x,x],[y,y,y,y]],[0,0,0,0],[0,0,0,0]]

map(lambda l: sum(l,[]) if isinstance(l[0],list) else l, lst)

#gives: [[0, 0, 0, 0], [1, 1, 1, 1, 2, 2, 2, 2], [0, 0, 0, 0], [0, 0, 0, 0]]

我认为x=1y=2

根据图片,您似乎有以下列方式嵌套列表:

x,y=1,2
lst = [[[0,0,0,0]],[[[x,x,x,x],[y,y,y,y]]],[[0,0,0,0]],[[0,0,0,0]]]
# 0, x, and y in you case are lists/touples, but for this example there are ints.
# it should not matter anyway for this example.

map(lambda l: [sum(l[0],[])] if len(l[0])==2 else l, lst)
# relults in: [[[0, 0, 0, 0]], [[1, 1, 1, 1, 2, 2, 2, 2]], [[0, 0, 0, 0]], [[0, 0, 0, 0]]]