繁体   English   中英

扁平化嵌套列表中的元组

[英]Flatten tuples in a nested list

是否有一个紧凑的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]]

使用map展平列表只会给我以下的关注

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

提前谢谢了!

我会做:

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

如您所知, zip部分会转置列表的外部列表。 然后,我抓住每对元组并将其连接起来,然后将合并的元组变成一个列表。 如果您不在乎最后是否有列表列表或元组列表,则可以摆脱list调用。

您应该能够使用sum概括Blckknght对列表中任意数量的元组的答案

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

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

您可以对zip()使用列表推导 ,如下所示:

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

这是一种方法。

from itertools import chain
l = [[(1,2,3),(4,5,6)],[(7,8,9),(10,11,12)]]
[list(chain.from_iterable(s)) for s in l]

给我

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM