@somnick

Как сделать распределение (round robin) значений (из списка) по списку?

Привет!
Как сделать round-robin распределение значений из списка, по значениям из другого списка?

Дано:
p_list = [A1, B2, C3]
t_list = [123, 456, 789, 012, 345]


Необходимо, каждому значению из p_list по очереди назначить одно значение из t_list,
чтобы в итоге получилось примерно так:
print(A1)
['123', '012']
print(C3)
['789']


t_list будет пополнятся значениями из файла, и это нужно учесть, т.к. планируется запускать скрипт распределения именно после дополнения нового значения в данный список.
Т.е. нужно сохранять информацию о предыдущем назначении.
  • Вопрос задан
  • 310 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
from itertools import cycle

p_list = [[], [], []]
t_list = [123, 456, 789, 012, 345]

for l, v in zip(cycle(p_list), t_list):
    l.append(v)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
Вместо p_list завести dictionary, в которой хранятся пары имя:список_значений_из_t_list.
Если количество ключей в словаре неизменно, можно добавлять новые значения в ключ словаря с номером len(t_list) % len(p_dict)
Ответ написан
Комментировать
Sly_tom_cat
@Sly_tom_cat
.
Если использовать совсем примитивный набор действий то можно так:

p_list = [[], [], []]
t_list = [123, 456, 789, 12, 345]

l = len(p_list)
p = len(t_list)
for i in range(p):
   p_list[i%l].append(t_list[i])


Если нужно задать смещение в распределении то можно его задать добавляя смещения в строку которая в цикле

...
l_shift = 2    # смещение "с какой позиции p_list начинать раздавать"
for i in range(p):
   p_list[(i+l_shift)%l].append(t_list[i])

или
...
l_shift = 2    # смещение "с какой позиции t_list начинать раздавать, начало t_list будет роздано после конца"
for i in range(p):
   p_list[i%l].append(t_list[(i+l_shift)%p])
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 нояб. 2024, в 02:45
2000 руб./за проект
24 нояб. 2024, в 23:46
20000 руб./за проект