使用标签展平嵌套列表,保留标签,无需动态分配

时间:2017-10-07 17:59:25

标签: python

我有这样的数据:

lst = [('label1', [1.1, 1.2, ...]), 
       ('label2', [2.1, 2.2, ...]), 
       ('label3', 3.), ... ]

其中一些元组具有嵌套的元素列表,而某些元素是单个元素(其中单个元素不可迭代)。我想将数据压平为:

newlst = [('label1', 1.1), ('label1', 1.2), ... ('label3', 3.) ...]

我可以简单地做一些事情:

newlst = []
for tup in lst:
    try:
        newlst.extend([(tup[0], y) for y in tup[1]])
    except TypeError:
        newlst.append(tup)

但这会动态分配newlst。我也可以通过lst一次,计算所有元素,使newlst = [None] * N_elements,然后再次传递并分配值,但这感觉很笨重。有没有更好的方法来避免动态分配newlst?

1 个答案:

答案 0 :(得分:0)

我会在lst

上使用列表理解
newlst = [(label, el) for label, sublst in lst 
                      for el in (sublst if hasattr(sublst, "__iter__") else [sublst])]