python添加重复元素_在Python 3.6中添加迭代时重复元素

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值