【问题标题】:How to create list from a list of tuples如何从元组列表创建列表
【发布时间】:2019-11-21 15:11:03
【问题描述】:

我有以下代码。输入是一个元组列表,元组本身可以是一个元组列表,

案例 1: 输入

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

输出:

[
    ('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()))]
]

输出: 两个列表

[
    ('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()))]
]

输出,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个元组。

如何做到这一点? 谢谢

【问题讨论】:

  • steps 将包含所有 3 个项目作为元组列表时,您能否再添加一个用例?
  • 完全同意@RomanPerekhrest,您的输入不是统一类型的,这使得处理起来有点困难......

标签: python python-3.x


【解决方案1】:

如果您的输入是统一类型(意味着所有列表元素都是元组列表), 那么使用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)

两者的输出是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2022-12-08
    • 2017-03-27
    • 2015-10-16
    • 2013-05-29
    相关资源
    最近更新 更多