Python 嵌套列表中的列表合并

Python 嵌套列表中的列表合并,python,python-3.x,list,Python,Python 3.x,List,我有以下清单: [['a', [0, 1]], ['b', [2, 3]], ['c', [4, 5]]] 我想将其更改为: [['a', 0, 1], ['b', 2, 3], ['c', 4, 5]]` 如何在Python3中使用列表理解来实现它 自Python 3.5+以来,您可以在列表声明中使用解包。在列表中使用: lst = [['a', [0, 1]], ['b', [2, 3]], ['c', [4, 5]]] new_lst = [[x, *more] for x, mor

我有以下清单:

[['a', [0, 1]], ['b', [2, 3]], ['c', [4, 5]]]
我想将其更改为:

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

如何在Python3中使用列表理解来实现它

自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]]

下面是一个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]]

使用列表理解和而不使用解包操作员
*
,以下是我易于阅读和理解的解决方案:

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]]
很简单,不是吗? 现在,使用解包操作符
*
,如果您必须了解这个操作符,它甚至更短,但更难理解(与@Olivier Melançon的答案相同):

您可以尝试以下方法:

l_new = [[ll[0]] + ll[1] for ll in l]
输出:

>> [['a', 0, 1], ['b', 2, 3], ['c', 4, 5]]
我的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\u list
就是你想要的。

res=[[i]+j代表i,j代表L]
只是好奇:这个问题怎么太宽泛了?这是我今天面临的一个非常具体的问题。至于解决一个特定问题的方法:我认为每种编程语言都有多种方法?它是有效的,但这隐含地假设第一个元素是长度为1的字符串,这是一个很大的警告。谢谢,有警告。:)@OlivierMelançon是的,这绝对是一个好观点。老实说,我真的没有想到这一点。@GrantWilliams真的很期待有一天我们能够做到
flatte=lambda l:[*item if is instance(item,list)else item for sublist in l]
@OlivierMelançon展平一个常规列表(没有字符串),我认为
sum(lst,[])
真是太棒了!我会尽快接受。我现在需要在Python中学习这些*和**。@我相信只有在3.5版之后,才能在这样的列表中使用另一个*。这是一个很酷的功能,绝对值得读者学习。请注意,此列表解包是一个3.5+功能。谢谢,奥利弗!我确信可以定义lambda来解决这个问题,但不确定如何定义。谢谢您还可以从functools导入reduce使用reduce:
;新列表=减少(λy,x:y+[[x[0]]+x[1]],旧列表,[])
old_list = [['a', [0, 1]], ['b', [2, 3]], ['c', [4, 5]]]
new_list = list(map(lambda x: [x[0]] + x[1], old_list))