簡體   English   中英

如何從元組列表創建列表

[英]How to create list from a list of tuples

我有以下代碼。 輸入是一個元組列表,元組本身可以是一個元組列表,

案例1:輸入

steps = [
    ('func_a', func_a()),
    ('func_b', func_b()),
    ('func_c', func_c())
]

output:

[
    ('func_a', func_a()),
    ('func_b', func_b()),
    ('func_c', func_c())
]

案例2輸入:

steps = [
    ('func_a', func_a()),
    ('func_b', func_b()),
    [('func_c', func_c()), (('func_d', func_d()))]
]

output:兩個列表

[
    ('func_a', func_a()),
    ('func_b', func_b()),
    ('func_c', func_c())
]

[
    ('func_a', func_a()),
    ('func_b', func_b()),
    ('func_d', func_d())
]

案例 3 輸入:

steps = [
    [('func_a', func_a()),('func_e', func_e())]
    ('func_b', func_b()),
    [('func_c', func_c()), (('func_d', func_d()))]
]

Output,4 個列表

[
    ('func_a', func_a()),
    ('func_b', func_b()),
    ('func_c', func_c())
]

[
    ('func_a', func_a()),
    ('func_b', func_b()),
    ('func_d', func_d())
]

[
    ('func_e', func_e()),
    ('func_b', func_b()),
    ('func_c', func_c())
]


[
    ('func_e', func_e()),
    ('func_b', func_b()),
    ('func_d', func_d())
]

列表中元組的數量可以變化,例如,嵌套列表可以有 N 個元組。

如何做到這一點? 謝謝

如果您的輸入是統一類型(意味着所有列表元素都是元組列表),那么使用itertools.product會很容易,如下所示:

from itertools import product
from pprint import pprint

steps = [
    [('1', 'A'),('5', 'E')],
    [('2', 'B')], # single tuple still enclosed in list
    [('3', 'C'), (('4', 'D'))]
]

result = list(product(*steps))

pprint(result)

但不幸的是,它不是,因為孤獨的元組沒有放在列表中。 因此,我們需要先對steps進行一點轉換,使其成為統一格式,然后使用相同的方法:

from itertools import product
from pprint import pprint

steps = [
    [('1', 'A'),('5', 'E')],
    ('2', 'B'), # single tuple is NOT enclosed in list
    [('3', 'C'), (('4', 'D'))]
]

steps = [x if isinstance(x, list) else [x] for x in steps] # enclose single tuples in a list...

result = list(product(*steps))

pprint(result)

兩者的 Output 是:

[(('1', 'A'), ('2', 'B'), ('3', 'C')),
 (('1', 'A'), ('2', 'B'), ('4', 'D')),
 (('5', 'E'), ('2', 'B'), ('3', 'C')),
 (('5', 'E'), ('2', 'B'), ('4', 'D'))]

暫無
暫無

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

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