在python中重塑一个不规则的列表

时间:2011-10-24 23:08:35

标签: python list

我想重塑以下列表:

wide_list = [[1,['a','b','c']],[2,['d','e']],[3,'f']]

以“长格式”:

long_list = [[1,'a'],[1,'b'],[1,'c'],[2,'d'],[2,'e'],[3,'f']]

如何在Python中有效实现这一目标?

3 个答案:

答案 0 :(得分:5)

尝试嵌套列表理解:

>>> wide_list = [[1,['a','b','c']],[2,['d','e']],[3, ['f']]]
>>> long_list = [[k, v] for k, sublist in wide_list for v in sublist]
>>> long_list
[[1, 'a'], [1, 'b'], [1, 'c'], [2, 'd'], [2, 'e'], [3, 'f']]

注意,必须更改最后一组以匹配前两组的模式。而不是[3, 'f'],而是使用[3, ['f']]。否则,对于不遵循该模式的组,您将需要特殊情况逻辑。

答案 1 :(得分:2)

可以做的一种方法是使用列表理解:

>>> [[x[0],letter] for x in wide_list for letter in x[1]]
[[1, 'a'], [1, 'b'], [1, 'c'], [2, 'd'], [2, 'e'], [3, 'f']]

答案 2 :(得分:0)

使用list comprehensions

long_list = [[x[0],item] for x in wide_list for item in x[1]]

但是,this answer可能是最明确的。