我有一个返回元组列表的函数,我想迭代一遍:
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值,需要占用大量内存。是否可以将其转换为生成器?
答案 0 :(得分:2)
itertools.product
已经是一个发电机了。您可以返回它而不是将其转换为列表。
答案 1 :(得分:2)
您的方法是添加一个不需要的无关步骤。
prod_list = get_parameter_product(3, 0, 5)
可以替换为
prod_genr = product(range(0, 5), repeat=3)
itertools
中的任何内容都会返回生成器,而不是list
或tuple
。您可能希望查看documentation以检查您是否真的需要product
,而不是combinations
或permutations
。
答案 2 :(得分:0)
您无需将列表转换为生成器 - 只需将生成器转换为列表即可。
首先,要构建param_lists
,请使用生成器表达式而不是列表推导,并且您将拥有迭代器而不是列表。
其次,请勿在{{1}}声明中致电list
。
return