如何从存储在元组列表列表中的双元素元组中创建两个列表

我有一个包含许多列表的列表,其中有 4 个元组。

my_list = [[(12, 1), (10, 3), (4, 0), (2, 0)],
           [(110, 1), (34, 2), (12, 1), (55, 3)]]

我希望它们位于两个单独的列表中,例如:

my_list2 = [12,10,4,2,110,34,12,55]
my_list3 = [1,3,0,0,1,2,1,3]

我的尝试是为此使用该map功能。

my_list2 , my_list3 = map(list, zip(*my_list))

但这给了我一个错误:

ValueError: too many values to unpack (expected 2)


蓝山帝景
浏览 173回答 5
5回答

慕无忌1623718

您的方法非常接近,但您需要先展平:from itertools import chainmy_list = [[(12, 1), (10, 3), (4, 0), (2, 0)], [(110, 1), (34, 2), (12, 1), (55, 3)]]my_list2 , my_list3 = map(list,zip(*chain.from_iterable(my_list)))my_list2# [12, 10, 4, 2, 110, 34, 12, 55]my_list3# [1, 3, 0, 0, 1, 2, 1, 3]

隔江千里

一种不同的,简单的方法:my_list = [[(12, 1), (10, 3), (4, 0), (2, 0)], [(110, 1), (34, 2), (12, 1), (55, 3)]]first = []second = []for inner in my_list:    for each in inner:        first.append(each[0])        second.append(each[1])print(first)  # [12, 10, 4, 2, 110, 34, 12, 55]print(second)  # [1, 3, 0, 0, 1, 2, 1, 3]

幕布斯7119047

您可以使用列表理解 (5.1.3)。元组的第一个数字:my_list2 = [tuple[0] for inner in my_list for tuple in inner]第二个元组数:my_list3 = [tuple[1] for inner in my_list for tuple in inner]

慕神8447489

一种不同的,简单的方法:my_list = [[(12, 1), (10, 3), (4, 0), (2, 0)], [(110, 1), (34, 2), (12, 1), (55, 3)]]first = []second = []for inner in my_list:    for each in inner:        first.append(each[0])        second.append(each[1])print(first)  # [12, 10, 4, 2, 110, 34, 12, 55]print(second)  # [1, 3, 0, 0, 1, 2, 1, 3]

蝴蝶刀刀

这个怎么样?my_list = [[(12, 1), (10, 3), (4, 0), (2, 0)], [(110, 1), (34, 2), (12, 1), (55, 3)]]flatten = lambda l: [item for my_list in l for item in my_list]list1, list2 = zip(*flatten(my_list))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python