【问题标题】:Python : extract from list of lists [duplicate]Python:从列表列表中提取[重复]
【发布时间】:2015-10-06 18:04:10
【问题描述】:

我有一个列表列表,需要提取每个项目;最终写出他们的笛卡尔积。

from itertools import product

b = {}
a = [[1, 2], [3, 4], ['a', 'b']]

for i, v in enumerate(a):
  b[i] = v

#These don't work because we are feeding a single list to product
print list(product(x for x in a)) # [([1, 2],), ([3, 4],), (['a', 'b'],)]
print list(product(b.values())) # [([1, 2],), ([3, 4],), (['a', 'b'],)]

如果我能得到这个,product 可以正常工作:

print list(product([1, 2], [3, 4], ['a', 'b']))
[(1, 3, 'a'), (1, 3, 'b'), (1, 4, 'a'), (1, 4, 'b'), (2, 3, 'a'), (2, 3, 'b'), (2, 4, 'a'), (2, 4, 'b')]

【问题讨论】:

    标签: python list itertools


    【解决方案1】:

    使用 *a 解压缩到 itertools.product 中。示例 -

    print list(product(*a))
    

    解包会将a 的每个元素作为单独的参数发送到product,而不是单个列表(就像-list(product([1, 2], [3, 4], ['a', 'b'])))。

    演示 -

    >>> a = [[1, 2], [3, 4], ['a', 'b']]
    >>> from itertools import product
    >>> print(list(product(*a)))
    [(1, 3, 'a'), (1, 3, 'b'), (1, 4, 'a'), (1, 4, 'b'), (2, 3, 'a'), (2, 3, 'b'), (2, 4, 'a'), (2, 4, 'b')]
    

    【讨论】:

    • 整洁。我已经多次看到* 运算符。它在所有地方都做类似的工作吗?
    • 在函数调用中(如上面的)是的。但是当你在函数定义中使用它时,它就不同了。然后它意味着任意数量的位置参数(然后所有这些位置参数都以您在 * 之后使用的名称放入列表中)。
    • 是的,这意味着您希望允许任意数量的参数。正确吗?
    • 另外,我相信在 Python 3.x 中,您有多个解包分配,其中使用了 * - stackoverflow.com/questions/2531776/…
    • 是的,你是对的。
    猜你喜欢
    • 2017-12-15
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 2023-01-24
    • 1970-01-01
    • 2021-10-22
    • 2019-06-28
    相关资源
    最近更新 更多