我有以下问题:我有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)
?