在嵌套列表中展平元组

2021-09-17 00:39:21 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有一个紧凑的oneliner或python习惯用法来处理以下任务?你知道吗

我想像这样变换元组列表:

input = [[(1,2,3),(4,5,6)],[(7,8,9),(10,11,12)]]

对此:

output [[1,2,3,7,8,9], [4,5,6,10,11,12]]

使用地图和压平列表只给了我以下几点

input_trans = map(list, zip(*input))
input_trans_flat = [item for sublist in input_trans for item in sublist]
Out: [(1, 2, 3), (7, 8, 9), (4, 5, 6), (10, 11, 12)]

非常感谢!你知道吗

3条回答
网友
1楼 ·

可以将list comprehension^{}一起使用,如下所示:

output = [[item for tup in (i, j) for item in tup] for i, j in zip(*input)]

输出:

>>> input = [[(1, 2, 3), (4, 5, 6)], [(7, 8, 9), (10, 11, 12)]]
>>>
>>> output = [[item for tup in (i, j) for item in tup] for i, j in zip(*input)]
>>> output
[[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]
网友
2楼 ·

我会做:

output = [list(a + b) for a, b in zip(*input)]

正如您已经知道的,zip部分转换列表的外部列表。然后我抓取每一对元组并连接它们,然后将组合的元组变成一个列表。如果您不关心最后是列表列表还是元组列表,那么可以去掉list调用。你知道吗

网友
3楼 ·

您应该能够使用sumBlckknght's answer泛化为列表中任意数量的元组。你知道吗

output = [list(sum(x, ())) for x in zip(*input)]
print(output)

[[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]

相关问题