我想重塑以下列表:
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中有效实现这一目标?
答案 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)
long_list = [[x[0],item] for x in wide_list for item in x[1]]
但是,this answer可能是最明确的。