为Peop分配任务

2024-05-09 20:06:08 发布

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

应该注意的是,我是Python的初学者。我有16项需要完成的任务,这些任务包含在列表中:

task_list = ['task_1', 'task_2', 'task_3', 'task_4', 'task_5', 'task_6', 'task_7', 'task_8', 'task_9', 'task_10', etc...]

我还有四个人,A、B、C和D,他们将平均分配这些任务(每人4个任务)。对于每个人,我都创建了一个空列表。在

personA_tasks = [] personB_tasks = [], etc.

我怎样才能将这16个任务随机地附加到这四个列表中,使这四个列表的长度都是4?在

这是家庭作业,仅供参考。在


Tags: 列表tasketclisttasks家庭作业初学者persona
3条回答

因此,首先,当您真正想要一个数据结构persons_tasks时,定义四个变量是个坏主意,其中每个人都是一个键或数字。在

然后,你可以列一张清单,列出哪些人承担了哪项任务,然后重新排列这个清单:

import random
from collections import defaultdict

persons = ['A','B','C','D']
tasks = ['Task_%i' for i in range(1,17)]
person_for_task = persons * (len(tasks) / len(persons))
random.shuffle(person_for_tasks)
persons_tasks = defaultdict(list)
for person, task in zip(person_for_task, tasks):
    persons_tasks[person].append(task)

使用random.shuffle对列表进行无序排列(就位)。 然后使用grouper recipezip(*[iterator]*4)将项目收集为4组:

In [32]: import random
In [33]: task_list = ['task_%d' % (i,) for i in range(1, 17)]

In [34]: random.shuffle(task_list)

In [35]: persons = zip(*[iter(task_list)]*4)

In [36]: persons
Out[36]: 
[('task_7', 'task_2', 'task_15', 'task_13'),
 ('task_6', 'task_11', 'task_9', 'task_12'),
 ('task_5', 'task_10', 'task_4', 'task_1'),
 ('task_3', 'task_8', 'task_14', 'task_16')]

好的一面是,石斑鱼的食谱相当优雅。不幸的是,这不是Python中最容易理解的部分。要了解石斑鱼食谱,你需要了解:

有了这些概念,就可以找到石斑鱼食谱的解释here。在

一种变体,它将指定的人作为一个带有任务列表的dict中的键。。。请注意,这可能会分配不均衡的任务。。。因此,您可以对人员列表进行优先级排序,以便将任务分配给第一个列出的人。例:如果你有3个任务,2个人,那么1个人会得到2,2个人会得到1。在

from collections import defaultdict
from random import shuffle
from itertools import cycle, izip

tasks = range(16)
people = ['Bob', 'Jim', 'Sam', 'Mel']

shuffle(tasks)
assigned = defaultdict(list)
for task, person in izip(tasks, cycle(people)):
    assigned[person].append(task)

# defaultdict(<type 'list'>, {'Mel': [10, 2, 8, 4], 'Bob': [0, 11, 15, 13], 'Jim': [1, 7, 5, 14], 'Sam': [12, 9, 6, 3]})

相关问题 更多 >