Выберите элемент из списка, как это делает random.choice(), но не случайным образом

Я знаю, что это может быть глупый вопрос. Но на этом ноутбук есть следующий кусок кода:

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. Я хочу, чтобы код выбирал элемент списка по порядку, как он есть в списке. Как я мог это сделать?

Спасибо

вы можете использовать "генератор", который всегда yield один элемент

lucidbrot 16.03.2022 14:46
for worker in workers? workers[i]?
matszwecja 16.03.2022 14:46
workers.pop() были бы еще варианты.
jasonharper 16.03.2022 14:50
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть несколько вариантов для этого.

Индексация списка:

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]

Как он мог вписаться в код «зацикливания рабочих»?

MVAC 16.03.2022 15:04

Прямо сейчас ваш код перебирает маршруты и выбирает воркеров без замены (нельзя выбирать одного и того же воркера более одного раза). Вы можете переключить это на обход рабочих процессов и выбор маршрутов. for i in range(len(workers)): route = routes.iloc[i] Но сложно сказать, потому что я не знаю подробностей вашей ситуации. Возможно, вам будет проще заменить «_» на «i» в for _, row in routes.iterrows(), а затем использовать «i» для индексации работников. Просто убедитесь, что у вас есть как минимум столько рабочих, сколько у вас есть маршрутов! Я добавлю это к своему ответу.

Ken Bassett 16.03.2022 15:17

worker = workers.pop(0) сделал свое дело! Спасибо!

MVAC 16.03.2022 16:31

Другие вопросы по теме