簡體   English   中英

如何從存儲在元組列表列表中的兩個元素元組中創建兩個列表

[英]How to make two lists out of two-elements tuples that are stored in a list of lists of tuples

我有一個列表,其中包含許多列表,其中有 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 function。

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

但這給了我一個錯誤:

ValueError: too many values to unpack (expected 2)

您的方法非常接近,但您需要先展平:

from itertools import chain

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

您可以使用列表理解 (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]

試試看:

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

my_list2, my_list3 = map(list, zip(*[j for i in my_list for j in i]))
print(my_list2)
# [12, 10, 4, 2, 110, 34, 12, 55]
print(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)]]

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

list1, list2 = zip(*flatten(my_list))

這是一種方法:

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

my_list2 = [a for b in [[t[0] for t in my_list[i]] for i,n in enumerate(my_list)] for a in b]
my_list3 = [a for b in [[t[1] for t in my_list[i]] for i,n in enumerate(my_list)] for a in b]

print(my_list2)
print(my_list3)

Output:

[12, 10, 4, 2, 110, 34, 12, 55]
[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)]]

my_list2, my_list3 = zip(*sum(my_list, []))

print(my_list2)
print(my_list3)

OUTPUT

> python3 test.py
(12, 10, 4, 2, 110, 34, 12, 55)
(1, 3, 0, 0, 1, 2, 1, 3)
>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM