为树创建组合[Python]

2024-09-30 06:29:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个类比来表达我的问题。假设我们有20个坑可以种树,我们有6种树可以种。我想得到种植这些树的所有可能的组合。我在图中给出了一个组合示例。下面是我尝试过的实际代码,但给出了MemoryError。但我可以在循环中使用第一个组合,然后再移动到另一个组合。我不需要将整个阵列保存在一个3d阵列中

import itertools
l = [False,True]
a=list(itertools.product(l,repeat=6))
a=list(itertools.product(a,repeat=20))

•树木名称:A、B、C、D、E、F

•G表示无种植园

•我们拥有无限数量的每棵树。所以我们可以在每个坑里种同一棵树

•我们可以让每个孔都不进行铺设

给定示例的表示:

[A]、[G]、[D]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]]

整个组合可以在3d numpy数组中,也可以通过for循环迭代每个组合

输出示例:

[A]、[G]、[D]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[G]

[A]、[G]、[D]、[G]、[G]、[G]、[G]、[G]、[G]、[G]、[A]、[G]、[G]、[G]、[G]、[G]、[G]、[G]

[A]、[A]、[A]、[A]、[A]、[A]、[A]、[A]、[A]、[A]、[A]、[A]、[A]、[A]、[A]、[A]、[A]]

enter image description here


Tags: 代码import名称falsetrue示例数量product
1条回答
网友
1楼 · 发布于 2024-09-30 06:29:32

一种更简单的方法是使用案例列表对问题建模:A->G然后使用itertools.product()。可能list(itertools.product())仍然会给您带来内存错误。在这种情况下,只需使用next()来拉取后续的组合:

import itertools
import string

cases = list(string.ascii_uppercase[:7])
gen = itertools.product(cases, repeat=20)


for i in range(10): 
    print(next(gen))
# ('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A')
# ('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B')
# ('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'C')
# ('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'D')
# ('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'E')
# ('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'F')
# ('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'G')
# ('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'A')
# ('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B')
# ('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'C')

相关问题 更多 >

    热门问题