Я знаю, что это может быть глупый вопрос. Но на этом ноутбук есть следующий кусок кода:
import random
assignments_to_add = []
for _, row in routes.iterrows():
worker = random.choice(workers)
workers.remove(worker)
route_stops = stops.loc[(stops['RouteName'] == row["RouteName"]) & stops['globalid'].notnull()]
for _, stop in route_stops.iterrows():
assignments_to_add.append(workforce.Assignment(
project,
assignment_type = "Inspection",
location=stop["name"],
status = "assigned",
worker=worker,
assigned_date=datetime.now(),
due_date=stop["DepartTime"],
geometry=stop["SHAPE"]
))
assignments = project.assignments.batch_add(assignments_to_add)
Рабочие в worker = random.choice(workers)
— это список. Итак, я не могу найти способ не сделать это random
. Я хочу, чтобы код выбирал элемент списка по порядку, как он есть в списке. Как я мог это сделать?
Спасибо
for worker in workers
? workers[i]
?
workers.pop()
были бы еще варианты.
У вас есть несколько вариантов для этого.
Индексация списка:
worker = workers[0]
del workers[0]
.pop()
:
worker = workers.pop(0)
# pop removes item from list and assigns to worker
next()
:
#convert list to iterator
w_iter = iter(workers)
# anytime you need the next worker, call the following line
worker = next(workers)
Также рассмотрите цикл через рабочих:
for worker in workers:
do_something()
Может быть, самое простое для вас:
for i, row in routes.iterrows():
worker = workers[i]
Как он мог вписаться в код «зацикливания рабочих»?
Прямо сейчас ваш код перебирает маршруты и выбирает воркеров без замены (нельзя выбирать одного и того же воркера более одного раза). Вы можете переключить это на обход рабочих процессов и выбор маршрутов. for i in range(len(workers)): route = routes.iloc[i]
Но сложно сказать, потому что я не знаю подробностей вашей ситуации. Возможно, вам будет проще заменить «_» на «i» в for _, row in routes.iterrows()
, а затем использовать «i» для индексации работников. Просто убедитесь, что у вас есть как минимум столько рабочих, сколько у вас есть маршрутов! Я добавлю это к своему ответу.
worker = workers.pop(0)
сделал свое дело! Спасибо!
вы можете использовать "генератор", который всегда
yield
один элемент