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中,在使用*
的地方有多个解包赋值-。是的,你是正确的。