Предположим, у меня есть три класса объектов и три списка, содержащие несколько экземпляров соответствующего класса. Я хочу, чтобы каждый объект выполнял подобное действие n раз. Я могу сделать это в фиксированном порядке с помощью itertools.chain (выполнить итерацию по каждому объекту в первом списке n раз, сделать это для второго списка и т. Д.).
Моя проблема в том, что я должен сделать это случайно. Это означает: выбрать один объект случайным образом из одного из трех списков, выбранных случайным образом, выполнить индивидуальное действие и делать это до тех пор, пока все действия не будут выполнены.
Пока что возможные решения, которые я представляю, очень громоздки, может быть, вы сможете показать мне питонский способ сделать это ...
Спасибо!
Вот упрощенная версия решения itertools.chain:
import itertools as iter
n_objects = 10
n_actions_A = 10
n_actions_B = 2
n_actions_C = 30
Class A(object):
def __init__(self):
self.counter = 0
def action(self):
for i in range(n_actions_A):
self.counter += 1
Class B(object):
def __init__(self):
self.counter = 0
def action(self):
for i in range(n_actions_B):
self.counter += 1
Class C(object):
def __init__(self):
self.counter = 0
def action(self):
for i in range(n_actions_C):
self.counter += 1
A_list = [A() for n in range(n_objects)]
B_list = [B() for n in range(n_objects)]
C_list = [C() for n in range(n_objects)]
for myobject in iter.chain(A_list, B_list, C_list):
myobject.action()
print [myobject.counter for myobject in A_list]
Редактировать: количество действий отличается от класса к классу. Я предполагаю, что мне нужно создать список подсписков, каждый из которых представляет отдельное действие и со ссылкой на соответствующий объект. После действия список будет удален. Подсписок будет выбран с помощью random.choice, поэтому каждое действие имеет одинаковую вероятность ...