[英]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.