Python 依次在多个列表上随机迭代

Python 依次在多个列表上随机迭代,python,list,random,iteration,Python,List,Random,Iteration,假设我有三个对象类和三个包含相应类的多个实例的列表。我希望每个对象执行n次类似的操作。我可以使用itertools.chain按固定顺序执行此操作(在第一个列表中对每个对象迭代n次,在第二个列表中执行此操作,等等) 我的问题是,我必须随机做。这意味着:从随机选择的三个列表中随机选择一个对象,执行单个操作,直到所有操作完成 到目前为止,我设想的可能的解决方案非常麻烦,也许你可以给我展示一下pythonic的方法来做到这一点 谢谢 以下是itertools.chain解决方案的简化版本: impor

假设我有三个对象类和三个包含相应类的多个实例的列表。我希望每个对象执行n次类似的操作。我可以使用itertools.chain按固定顺序执行此操作(在第一个列表中对每个对象迭代n次,在第二个列表中执行此操作,等等)

我的问题是,我必须随机做。这意味着:从随机选择的三个列表中随机选择一个对象,执行单个操作,直到所有操作完成

到目前为止,我设想的可能的解决方案非常麻烦,也许你可以给我展示一下pythonic的方法来做到这一点

谢谢

以下是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选择,因此每个操作都具有相同的概率…

我认为您正在寻找类似于
random.sample
random.shuffle
的操作

这里有一个方法

从随机选取的三个列表中随机选取一个对象,执行单个操作,直到所有操作完成

输出:

processing list: [1, 2, 3, 4, 5]
3
5
4
1
2
processing list: ['A', 'B', 'C', 'D']
A
C
D
B
processing list: ['X', 'Y', 'Z', 'W']
W
Y
Z
X

请提供以下两种情况,一种是记录每件物品被挑选的频率,如果他们被随机挑选了5次,请将其从列表中删除;另一种是重复该列表5次,然后将其洗牌(如有5副牌的21点游戏)。此外,三个类别的概率应该是多少?如果列表A中还有8个对象,而B和C中只有1个,那么A的概率应该是1/3还是8/10?@tobias_k或者,如果一个列表应该是不可变的,那么创建一个索引列表并对其进行无序排列,然后在
列表[shuffled_index[i]]
中迭代,在第二次拾取第一个元素之前,是否必须拾取列表A中的所有元素一次?
processing list: [1, 2, 3, 4, 5]
3
5
4
1
2
processing list: ['A', 'B', 'C', 'D']
A
C
D
B
processing list: ['X', 'Y', 'Z', 'W']
W
Y
Z
X