如何获取包含工作人员所有可能分配的列表



我有以下问题:我有N个工人。它们中的每一个都可以分配给 4 个任务 T1、T2、T3 和 T4 之一。我想生成一个包含所有分配可能性的列表,如下所示:

W1->T1, W2->T1, ... Wx->T1  
W1->T1, W2->T1, ... Wx->T2  
W1->T1, W2->T2, ... Wx->T2  
...  
W1->T4, W2->T4, ... Wx->T4

我该怎么做?Python或 VB.NET 代码将是最好的,但任何语言都可以。

你可以这样做:

import itertools
def show_assignments(workers, tasks):
    prod = itertools.product(*[range(tasks)]*workers)
    for a in prod:
        print(", ".join("W%d->T%d" % (w+1, t+1) for (w, t) in enumerate(a)))

例如,您可以将其称为:

show_assignments(5, 4)

这将结果显示为:

W1->T1, W2->T1, W3->T1, W4->T1, W5->T1
W1->T1, W2->T1, W3->T1, W4->T1, W5->T2
...
W1->T4, W2->T4, W3->T4, W4->T4, W5->T3
W1->T4, W2->T4, W3->T4, W4->T4, W5->T4

你可以使代码更好。但举个例子,这将起作用(python 3.6)

workers = ["W1","W2","W3","W4","W5"] #workers
tasks = ["T1","T2","T3","T4"] #tasks
for worker in workers:
    for task in tasks:
        print(worker + " >> " + task)

您希望生成工作人员池和任务池的笛卡尔乘积。

有一个标准函数:蟒蛇2蟒蛇3

所以也许你需要itertools.product(workers, tasks)

相关内容

最新更新