列表在嵌套列表中合并

时间:2018-06-07 15:38:34

标签: python python-3.x list

我有以下列表:

[['a', [0, 1]], ['b', [2, 3]], ['c', [4, 5]]]

我想将其更改为:

[['a', 0, 1], ['b', 2, 3], ['c', 4, 5]]`

如何使用列表推导在Python 3中完成?

5 个答案:

答案 0 :(得分:8)

从Python 3.5+开始,您可以在列表声明中使用解包。在列表理解中使用它:

lst = [['a', [0, 1]], ['b', [2, 3]], ['c', [4, 5]]]

new_lst = [[x, *more] for x, more in lst]

print(new_lst) # [['a', 0, 1], ['b', 2, 3], ['c', 4, 5]]

答案 1 :(得分:4)

使用列表理解和不带解包运算符*,这是我易于理解且易于理解的解决方案:

myList = [['a', [0, 1]], ['b', [2, 3]], ['c', [4, 5]]]
newList = [[x, y, z] for x,[y,z] in myList]
print(newList)
# [['a', 0, 1], ['b', 2, 3], ['c', 4, 5]]
很简单,不是吗? 现在,使用解包运算符*,它甚至更短,但如果您必须了解此运算符(与@OlivierMelançon相同的答案),则可以理解这一点:

myList = [['a', [0, 1]], ['b', [2, 3]], ['c', [4, 5]]]
newList = [[x, *y] for x,y in myList]
print(newList)
# [['a', 0, 1], ['b', 2, 3], ['c', 4, 5]]

答案 2 :(得分:2)

你可以试试这个:

l_new = [[ll[0]] + ll[1] for ll in l]

输出:

>> [['a', 0, 1], ['b', 2, 3], ['c', 4, 5]]

答案 3 :(得分:1)

这是一个lambda函数,可以展开列表列表。然后,您可以在列表推导中使用它来遍历列表列表列表的最外层。

flatten = lambda l: [item for sublist in l for item in sublist]

# the example list
lst = [['a', [0, 1]], ['b', [2, 3]], ['c', [4, 5]]]
final = [flatten(l) for l in lst]

输出:

>>> final
[['a', 0, 1], ['b', 2, 3], ['c', 4, 5]]

答案 4 :(得分:1)

我的2美分:

old_list = [['a', [0, 1]], ['b', [2, 3]], ['c', [4, 5]]]
new_list = list(map(lambda x: [x[0]] + x[1], old_list))

new_list正是您要找的。