首页 > 解决方案 > (Python)是否有更简单的方法将列表中的元素分配给另一个列表中的元素?

问题描述

假设我在一个列表中有 n 个工人,每个工人都有不同的任意技能水平,例如:

workers = [10, 50, 20, 30, 100, 150]

我需要将这些工人分配给两种不同类型的工作之一。一种类型的工作要求工人低于或等于某个技能水平(技能水平作为该列表的一个元素给出),例如:

job_one = [20, 5, 100, 25]

而另一份工作要求工人高于或等于一定的技能水平:例如:

job_two = [30, 20, 25, 60]

我需要编写一个程序来最大化分配给工作的工人数量,并找到该值。我尝试通过对所有列表进行排序(.sort())然后对每个列表使用 for 循环来将每个作业分配给工作人员来编写此代码。然后,作业被删除 (.remove())。

但是,这种方法在处理较大的集合时变得非常低效,而且由于我只需要占用最大数量的工作,我相信可能有一种更简单的方法。是这样吗?非常感谢您的帮助。

预期输出:

jobs_assigned = 6

标签: python

解决方案


请尝试以下代码

jobs_assigned=len(job_one)+len(job_two)-len([i for i in job_one if i<min(workers)])+len([i for i in job_two if i>max(workers)])

这假设可以根据所提供的预期输出推断一个工人可以分配多个工作。


推荐阅读