我有这样的数据:
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?
答案 0 :(得分:0)
我会在lst
newlst = [(label, el) for label, sublst in lst
for el in (sublst if hasattr(sublst, "__iter__") else [sublst])]