その際になるべく前回、前々回とメンバーの重複が少なくなるようにしたいです。
力まかせのコードですが参考まで
Python
1import random
2
3lst = ['Tanaka', 'Suzuki', 'Yamada', 'Sato', 'Minami',
4 'Takahashi', 'Matsunaga', 'Yasuda', 'Adachi', 'Nagata']
5
6while True:
7 teams = [random.sample(lst, 10) for _ in range(3)]
8 group = [(team[:3], team[3:6], team[6:]) for team in teams]
9 freq = [len([t for team in group for tm in team for t in tm if name in tm]) - 2
10 - len(set([t for team in group for tm in team for t in tm if name in tm])) for name in lst]
11 if max(freq) <= 1 and freq.count(1) <= 6:
12 break
13
14print(*group, sep='\n')
15print('(名前, 重複回数) =', *zip(lst, freq))
以下、前回までの回答です。
random.sample を使うとこんな感じです。
無駄な処理をなくしました。
Python
1import random
2
3lst = ['Tanaka', 'Suzuki', ... 'Nagata']
4teams = [random.sample(lst, 10) for _ in range(3)]
5for team in teams:
6 print(team[:3], team[3:6], team[6:])
以前のコードです。
Python
1import random
2
3lst = ['Tanaka', 'Suzuki', ... 'Nagata']
4nums = [random.sample(range(10), 10) for _ in range(3)]
5for num in nums:
6 team0 = [lst[n] for n in num[:3]]
7 team1 = [lst[n] for n in num[3:6]]
8 team2 = [lst[n] for n in num[6:]]
9 print(team0, team1, team2)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。