如何将列表转换为生成器?

时间:2012-11-19 23:16:43

标签: python numpy generator

我有一个返回元组列表的函数,我想迭代一遍:

def get_parameter_product(num_parameters, lower_range, upper_range):
    param_lists = [ xrange(lower_range, upper_range) for _ in xrange(num_parameters)]   
    return list(itertools.product(*param_lists))

for p in get_parameter_product(3, 0, 5):
    print p,

(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4), ... , (4, 4, 2), (4, 4, 3), (4, 4, 4)

但是,对于较大的num_parameters值,需要占用大量内存。是否可以将其转换为生成器?

3 个答案:

答案 0 :(得分:2)

itertools.product已经是一个发电机了。您可以返回它而不是将其转换为列表。

答案 1 :(得分:2)

您的方法是添加一个不需要的无关步骤。

prod_list = get_parameter_product(3, 0, 5)

可以替换为

prod_genr = product(range(0, 5), repeat=3)

itertools中的任何内容都会返回生成器,而不是listtuple。您可能希望查看documentation以检查您是否真的需要product,而不是combinationspermutations

答案 2 :(得分:0)

您无需将列表转换为生成器 - 只需将生成器转换为列表即可。

首先,要构建param_lists,请使用生成器表达式而不是列表推导,并且您将拥有迭代器而不是列表。

其次,请勿在{{1​​}}声明中致电list

return