Python:从列表列表中提取

Python:从列表列表中提取,python,list,itertools,Python,List,Itertools,我有一个列表列表,需要提取每个项目;最终写出他们的笛卡尔积 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]

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

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'],)]
如果我能够获得以下信息,
产品
工作正常:

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

使用
*
a
解包到
itertools.product
中。范例-

print list(product(*a))
解包将把
a
的每个元素作为单独的参数发送到
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')]

整洁的我见过
*
操作符很多次。它在任何地方都做类似的工作吗?在函数调用中(如上面的一个)是的。但是,当您在函数定义中使用它时,情况就不同了。然后,它意味着任意数量的位置参数(所有这些位置参数都会与您在
*
之后使用的名称一起放入列表)。是的,在这里,它意味着您希望允许任意数量的参数。正确吗?另外,我相信在Python3.x中,在使用
*
的地方有多个解包赋值-。是的,你是正确的。