仅将非空列表转换为列表列表中的元组

时间:2013-12-24 12:40:19

标签: python list python-3.x tuples

我该怎么转换这个:

[[], [], [('ef', 1)], [], [('cd', 3)], [('ab', 2)]]

进入这个:

[[], [], ['ef', 1], [], ['cd', 3], ['ab', 2]]

我知道要将元组转换为列表,我们只需使用list(元组),或者如果它是[(1,2),(3,4)]这样的列表,我们就可以使用map。我如何处理主列表中列表中的元组,而空列表保持不变?

3 个答案:

答案 0 :(得分:10)

>>> my_list = [[], [], [('ef', 1)], [], [('cd', 3)], [('ab', 2)]]

>>> [list(*el) for el in my_list]
[[], [], ['ef', 1], [], ['cd', 3], ['ab', 2]]

答案 1 :(得分:5)

>>> l = [[], [], [('ef', 1)], [], [('cd', 3)], [('ab', 2)]]
>>> import itertools
>>> [list(itertools.chain(*item)) for item in l]
[[], [], ['ef', 1], [], ['cd', 3], ['ab', 2]]

这也将处理每个列表元素的多个元组(如果这是所需的):

>>> l = [[], [], [('ef', 1)], [], [('cd', 3),('ab', 2)]]
>>> [list(itertools.chain(*item)) for item in l]
[[], [], ['ef', 1], [], ['cd', 3, 'ab', 2]]

答案 2 :(得分:4)

这样的事情:

>>> lis = [[], [], [('ef', 1)], [], [('cd', 3)], [('ab', 2)]]
>>> [list(x[0]) if x else x for x in lis]
[[], [], ['ef', 1], [], ['cd', 3], ['ab', 2]]