我正在尝试编写一部分代码,该代码从两个不同的列表中获取元素并进行匹配,如下所示,但是由于某种原因,我一直在输出列表中重复获取元素.

def assign_tasks(operators, requests, current_time):

"""Assign operators to pending requests.

Requires:

- operators, a collection of operators, structured as the output of

filesReading.read_operators_file;

- requests, a list of requests, structured as the output of filesReading.read_requests_file;

- current_time, str with the HH:MM representation of the time for this update step.

Ensures: a list of assignments of operators to requests, according to the conditions indicated

in the general specification (omitted here for the sake of readability).

"""

operators = sorted(operators, key=itemgetter(3, 4, 0), reverse=False)

requests = sorted(requests, key=itemgetter(3), reverse=True)

isAssigned = 0

tasks = []

langr = 0 #Variable that gets the language of the request's file (customer's language)

lango = 0 #Variable that gets the language of the operator's file (operator's language)

for i in range(len(requests)-1):

langr = requests[i][1] #What language does the customer speaks?

for k in range(len(operators)-1):

lango = operators[k][1] #What language does the operator speaks?

if langr == lango: #Do they speak the same language?

for j in range(len(operators[k][2])-1):

if (operators[k][2][j] == requests[i][2]) and (operators[k][4] <= 240): # The operator knows how to solve the client's problem? If yes, then group them together.

a = operators[k][2][j]

b = requests[i][2]

tasks.append([current_time, requests[i][0], operators[k][0]])

operator_time = operators[k][4]

request_time = requests[i][4]

new_operator_time = operator_time + request_time

operators[k][4] = new_operator_time

isAssigned == True

#operators.remove(operators[k])

requests.remove(requests[i])

else:

isAssigned = False

if isAssigned == False:

tasks.append([current_time, requests[i][0], "not-assigned"])

operators = sorted(operators, key=itemgetter(3, 4, 0), reverse=False)

return tasks, operators, requests

我当前的输入是这样的:

operators = [['Atilio Moreno', 'portuguese', ('laptops',), '10:58', 104], ['Leticia Ferreira', 'portuguese', ('laptops',), '11:03', 15], ['Ruth Falk', 'german', ('phones', 'hifi'), '11:06', 150], ['Marianne Thibault', 'french', ('phones',), '11:09', 230], ['Mariana Santana', 'portuguese', ('phones',), '11:11', 230], ['Beate Adenauer', 'german', ('hifi', 'phones'), '11:12', 140], ['Zdenka Sedlak', 'czech', ('phones',), '11:13', 56], ['Romana Cerveny', 'czech', ('phones',), '11:13', 213]]

requests = [['Christina Holtzer', 'german', 'hifi', 'fremium', 7], ['Andrej Hlavac', 'czech', 'phones', 'fremium', 9], ['Dulce Chaves', 'portuguese', 'laptops', 'fremium', 15], ['Otavio Santiago', 'portuguese', 'laptops', 'fremium', 15], ['Dina Silveira', 'portuguese', 'phones', 'fremium', 9], ['Rafael Kaluza', 'slovenian', 'laptops', 'fremium', 13], ['Sabina Rosario', 'portuguese', 'laptops', 'fremium', 10], ['Nuno Rodrigues', 'portuguese', 'laptops', 'fremium', 12], ['Feliciano Santos', 'portuguese', 'phones', 'fremium', 12]]

current_time = "14:55 06:11:2017"

print(assign_tasks(operators, requests, current_time))

我当前的输出是三个列表,例如,第一个列表是这样的:

[[11:05, Christina Holtzer, not-assigned],[11:05, Christina Holtzer, Beate Adenauer],[11:05, Andrej Hlavac, not-assigned]]

解决方法:

我真的不知道您要遵循的逻辑,这甚至不是我的意思,我的意思是,您可能无法专注于逻辑,因为您太忙于处理那些索引问题了.因此,我随意修改了一些代码以显示重要内容,如果您使用的是python,则应利用此功能,因为可读性很重要.

from operator import attrgetter

class Person:

def __init__(self, name, lan):

self.name = name

self.lan = lan

def is_compatible(self, other):

if other.lan == self.lan:

return True

return False

class Requester(Person):

def __init__(self, *args, problem, mode, time, **kwargs):

super().__init__(*args, **kwargs)

self.problem = problem

self.mode = mode

self.time = time

class Operator(Person):

def __init__(self, *args, expertise, hour, time, **kwargs):

super().__init__(*args, **kwargs)

self.expertise = expertise

self.hour = hour

self.time = time

self.assigned = False

operators = [

Operator(name='Atilio Moreno', lan='portuguese', expertise=('laptops',), hour='10:58', time=104),

.

.

.

Operator(name='Romana Cerveny', lan='czech', expertise=('phones',), hour='11:13', time=213),

]

requests = [

Requester(name='Christina Holtzer', lan='german', problem='hifi', mode='fremium', time=7),

.

.

.

Requester(name='Feliciano Santos', lan='portuguese', problem='phones', mode='fremium', time=12),

]

完成此操作后,只需输入您要考虑的内容,思考逻辑的任务就会变得更加简单.

def assign_tasks(operators, requests, current_time):

operators.sort(key=attrgetter('hour', 'time', 'name'))

requests.sort(key=attrgetter('mode'))

tasks = []

for requester in requests:

for operator in operators:

if requester.is_compatible(operator) and requester.problem in operator.expertise and operator.time < 240:

if not operator.assigned:

tasks.append([current_time, requester.name, operator.name])

operator.assigned = True

operator.time += requester.time

break # Breaks out of second for-loop so we go to the next requester

else: #In case no operator is available

tasks.append([current_time, requester.name, 'not-assigned'])

return tasks, operators, requests

tasks, operators, requests = assign_tasks(operators=operators, requests=requests, current_time=0)

print(tasks)

输出为:

[[0, 'Christina Holtzer', 'Ruth Falk'], [0, 'Andrej Hlavac', 'Zdenka Sedlak'], [0, 'Dulce Chaves', 'Atilio Moreno'], [0, 'Otavio Santiago', 'not-assigned'], [0, 'Dina Silveira', 'not-assigned'], [0, 'Rafael Kaluza', 'not-assigned'], [0, 'Sabina Rosario', 'not-assigned'], [0, 'Nuno Rodrigues', 'not-assigned'], [0, 'Feliciano Santos', 'not-assigned']]

有点长,但是所有请求者都拥有或没有运算符.

同样,我不知道这种逻辑是否是您所追求的逻辑,但是我希望您看到通过这种方法可以更轻松地思考问题(真正重要的问题),并且让其他人更容易阅读.

标签:python-3-x,list,for-loop,iteration,python

来源: https://codeday.me/bug/20191110/2014301.html

python添加重复元素_在Python 3.6中添加迭代时重复元素相关推荐

  1. python使用作为转义字符_当需要在字符串中使用特殊字符时,Python使用作为转义字符的起始符号...

    当需要在字符串中使用特殊字符时,Python使用作为转义字符的起始符号 答:\\ 最早出现的时间是 答:经前12小时 要想把握说话的艺术,需要掌握一下几个方面: 答:准确地说 清晰地说 礼貌地说 幽默 ...

  2. rails 添加外键_如何在Rails后端中添加功能强大的搜索引擎

    rails 添加外键 by Domenico Angilletta 通过多梅尼科·安吉列塔(Domenico Angilletta) In my experience as a Ruby on Rai ...

  3. java pdf添加透明水印_如何在PDF文件中添加透明水印

    原标题:如何在PDF文件中添加透明水印 有些文件添加水印,但是又不想水印影响文件的使用有时候会设置透明水印,那么PDF怎么设置透明水印呢,应该有很多的小伙伴们都很好奇应该怎么做吧,接下来就为大家分享一 ...

  4. mysql 添加表索引_如何向MySQL表中添加索引?

    如何向MySQL表中添加索引? 我有一个非常大的MySQL表,包含大约15万行数据.目前,当我试着运行SELECT * FROM table WHERE id = '1'; 代码运行良好,因为ID字段 ...

  5. python使用作为转义字符_当需要在字符串中使用特殊字符时, Python使用()作为转义字符。...

    当需传统中国社会的"法制"意味着( ) 字符字符作为转义字符GPS信号接收机,根据接收卫星的信号频率,可分为 串中地面点的平面位置可用哪些方式表示 使用时使用缓和曲线需要的主点定位 ...

  6. java打印列表所有元素_如何打印出Java中的列表的所有元素?

    下面是一些打印出列表组件的例子: public class ListExample { public static void main(String[] args) { List models = n ...

  7. python列表求平均值_长篇文讲解:Python要求O(n)复杂度求无序列表中第K的大元素实例...

    本文内容主要介绍了Python要求O(n)复杂度求无序列表中第K的大元素实例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧! 昨天面试上来就是一个算法,平时基本的算法还行,结果变个法 ...

  8. python开发每月工资_做python开发想要月薪20K不会这些怎么行?

    Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理 ...

  9. wordpress简捷按钮_通过在WordPress帖子中添加快速编辑按钮来节省时间

    wordpress简捷按钮 Have you ever made a mistake in your old WordPress posts and realized it when your use ...

  10. R语言使用scatterplot3d包的scatterplot3d函数可视化3D散点图(3D scatter plots)、在3D散点图中添加垂直线和数据点描影、3D图中添加回归平面

    R语言使用scatterplot3d包的scatterplot3d函数可视化3D散点图(3D scatter plots).在3D散点图中添加垂直线和数据点描影.3D图中添加回归平面(overlaid ...

最新文章

  1. 首发 | 旷视14篇CVPR 2019论文,都有哪些亮点?
  2. 【廖雪峰python入门笔记】tuple_“元素可变”
  3. 程序员生活智慧集——卓越程序员密码
  4. HDFS分布式文件系统
  5. 开源的视频笔记合集: 陌溪 / LearningNotes
  6. 流控组件Sentinel核心注解@SentinelResource中的参数fallback和blockHandler的使用方式
  7. 创意总监分享:我是如何做一款手游地图的
  8. mybatis学习(32):删除操作
  9. python与javascript的区别_python与js区别有哪些
  10. S5PV210裸机之时钟
  11. 腾讯云dts使用注意事项
  12. javascript 字符串与数组之间的相互转换(join、split)与splice介绍
  13. 【高项备考】质量管理的质量管理工具学习
  14. elementui表格合计自定义,尾行自定义
  15. godot引擎学习6
  16. 2023年前端面试题集锦
  17. MySQL使用HQL语句实现按中文拼音排序
  18. shell和javaAPI两种方式创建hbase表并预分区
  19. 1477_AURIX TC275 iLLD中看门狗密码获取接口分析
  20. java递归查询公司下所有部门及子部门

热门文章

  1. 物联网卡平台系统由几部分构成
  2. 32蜂鸣器天空之城代码_stm32版蜂鸣器播放爱若琉璃
  3. docker Ubuntu系统中使用 powershell
  4. java web调用exe文件_从网页WEB上调用本地应用程序(java)
  5. python with open as yaml_python – pyyaml并仅使用字符串引号
  6. cms php vue 开源_2020最受欢迎的企业网站CMS建站系统排行榜
  7. pythoncharm如何安装opencv_Pycharm Opencv环境配置
  8. c++ 后台 sendstring_苹果狂杀微信后台,微信官方出必杀技!
  9. php命令行是什么,什么是命令行?
  10. 航拍+AI︱paddlepaddle图像分割实现天空风格迁移(换天、漂浮城堡、宇宙飞船)