做出决策树

时间:2014-04-10 21:11:05

标签: python python-3.x

我有十个系统,A,B,C,...,J。 每个系统都可以启动或关闭。 例如,如果系统A,B,D和J关闭,其余部分为up,那么我想采取行动X. 如果系统C,D和H关闭,剩余部分上升,那么我想采取行动Y. 如果系统A,E,F,H和I关闭,其余部分为up,那么我想采取行动Z。

我想编写一个打印各种组合的程序(我相信有10个系统,每个系统可以上下有100种组合)。

到目前为止,我有这个:

import itertools
status_list = (
    "Up",
    "Down",
)
component_list = (
    "A",
    "B",
    "C",
    "D",
    "E",
    "F",
    "G",
    "G",
    "I",
    "J",
)
combinations = itertools.product(component_list, status_list)

2 个答案:

答案 0 :(得分:1)

如果您不介意使用二进制表示,我们可以使用0代表Up1代表Down

我们的值范围从010^2-1

01023

00000000001111111111

所以我们可以从0循环到1023,以10位二进制格式打印数字:

for x in range(2**10):
    print '{0:010b}'.format(x)

输出:

0000000000
0000000001
0000000010
0000000011
0000000100
0000000101
0000000110
...etc

如果您希望得到更好的信息并打印updown而不是01,您可以逐个检查数字并转换:< / p>

for x in range(2**10):

    #Iterate over each character c in the binary number x
    #Convert c to an int
    #Look up the value in status_list by taking c mod length of status list
    print(" ".join(status_list[int(c)%len(status_list)] for c in '{0:010b}'.format(x)))

输出:

Up Up Up Up Up Up Up Up Up Up
Up Up Up Up Up Up Up Up Up Down
Up Up Up Up Up Up Up Up Down Up
Up Up Up Up Up Up Up Up Down Down

答案 1 :(得分:1)

您可以使用Up打印Downitertools.product的所有可能组合:

import itertools
components = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
statuses = ['Up', 'Down']

for state in itertools.product(statuses, repeat=len(components)):
    for c,s in zip(components, state):
        print '{}:{}'.format(c,s),
    print

这会产生如下输出:

A:Up B:Up C:Up D:Up E:Up F:Up G:Up H:Up I:Up J:Up
A:Up B:Up C:Up D:Up E:Up F:Up G:Up H:Up I:Up J:Down
...
A:Up B:Down C:Down D:Down E:Down F:Down G:Down H:Down I:Down J:Up
A:Up B:Down C:Down D:Down E:Down F:Down G:Down H:Down I:Down J:Down
A:Down B:Up C:Up D:Up E:Up F:Up G:Up H:Up I:Up J:Up
A:Down B:Up C:Up D:Up E:Up F:Up G:Up H:Up I:Up J:Down
...
A:Down B:Down C:Down D:Down E:Down F:Down G:Down H:Down I:Down J:Up
A:Down B:Down C:Down D:Down E:Down F:Down G:Down H:Down I:Down J:Down

它可以很好地处理可变数量的组件或状态(例如,你可以使states = ['Up', 'Down', 'Unknown']得到3 ^ 10 = 59049输出。