我想使用以下表单中指定的元素组合生成一组列表:
[[10, 20], [30, 40], [50, 60]]
这意味着第一个元素的可用值是10和20,第二个元素的可用值是30和40,以此类推(为了简洁起见,我只为每个元素使用了两个元素选项;可能不止这些)。我想使用此规范来生成使用这些元素组合的所有列表(包括没有任何元素的可能性),生成如下内容:
[10]
[20]
[10, 30]
[10, 40]
[20, 30]
[20, 40]
[10, 30, 50]
[10, 30, 60]
[10, 40, 50]
[10, 40, 60]
[20, 30, 50]
[20, 30, 60]
[20, 40, 50]
[20, 40, 60]
我觉得itertools
可以用于此,但我不确定如何实现一个算法来生成这样的列表。有什么好的、通用的方法(例如,不局限于三个元素和三个硬编码的嵌套循环)可以从我上面展示的规范生成列表?你知道吗
作为一种尝试,我有以下几点:
import itertools
element_specifications = [[10, 20], [30, 40], [50, 60]]
lists = [list(list_configuration) for list_configuration in list(itertools.product(*element_specifications))]
for list_configuration in lists:
print(list_configuration)
这将生成以下列表,但请注意,它忽略了因使用无元素而产生的可能性:
[10, 30, 50]
[10, 30, 60]
[10, 40, 50]
[10, 40, 60]
[20, 30, 50]
[20, 30, 60]
[20, 40, 50]
[20, 40, 60]
编辑:我想到了以下几点,但我觉得很不雅观:
import itertools
element_specifications = [[10, 20], [30, 40], [50, 60]]
lists = []
for length in range(1, len(element_specifications) + 1):
lists.extend([list(list_configuration) for list_configuration in list(itertools.product(*element_specifications[:length]))])
for list_configuration in lists:
print(list_configuration)
您可以根据找到的解决方案创建双for循环列表:
或者更干净一点,使用
enumerate
:相关问题 更多 >
编程相关推荐