python itertools.product,使用itertools.product代替Python 3中的双嵌套for循环

The following code works, but appears verbose.

def gen(l):

for x in range(l[0]):

for y in range(l[1]):

for z in range(l[2]):

yield [x, y, z]

l = [1, 2, 3]

print(list(gen(l)))

>>>[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 0], [0, 1, 1], [0, 1, 2]]

My intention was to cut down on LOC with itertools.product. Here's what I came up with.

from itertools import product

def gen(l):

for x, y, z in product(map(range, l)):

yield [x, y, z]

l = [1, 2, 3]

print(list(gen(l)))

ValueError: not enough values to unpack (expected 3, got 1)

Is there a different way to use itertools.product so that there are enough values to unpack?

解决方案

You need to pass the elements of the map iterator to product separately with *:

for x, y, z in product(*map(range, l))

Incidentally, with another map call, you could save another line, skip the overhead of a Python generator, and do all the work in C:

def gen(l):

return map(list, product(*map(range, l)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值