我有一个模型,可以模拟8个特工成对的社会。 我要创建一个7个列表的列表(每个列表是一个回合),这样,在7个列表(或回合)之后,每个元素(或代理)已与所有其他代理配对一次。 我已经成功定义了一个在7个列表中排列配对的函数,但是我需要做到不重复配对。
import random
agents = [1,2,3,4,5,6,7,8]
def group(agents):
pairs = []
for round in range(7):
random.shuffle(agents)
gen = zip(*[iter(agents)]*2)
pairs.append(gen)
return pairs
print (group(agents))
我希望输出是这样的(一次具有不同配对构成的列表的列表)。示例:
[[(1, 2), (3, 4), (5, 6), (7, 8)],
[(1, 3), (2, 4), (5, 7), (6, 8)],
[(1, 4), (2, 3), (5, 8), (6, 7)],
[(1, 5), (2, 6), (3, 7), (4, 8)],
[(1, 6), (3, 8), (5, 2), (7, 4)],
[(1, 7), (2, 8), (3, 5), (4, 6)],
[(1, 8), (3, 6), (5, 4), (7, 2)]]
我已经检查了这个similar question。而且我可以看到它对我的问题很有用,但据我了解,它既不能解决列表之间的重复问题,也不能解决每个列表中的随机排列问题。