回答編集履歴

2

重複が少なくなるコードに改善

2021/09/14 12:44

投稿

lehshell
lehshell

スコア1156

test CHANGED
@@ -1,3 +1,49 @@
1
+ > その際になるべく前回、前々回とメンバーの重複が少なくなるようにしたいです。
2
+
3
+
4
+
5
+ 力まかせのコードですが参考まで
6
+
7
+ ```Python
8
+
9
+ import random
10
+
11
+
12
+
13
+ lst = ['Tanaka', 'Suzuki', 'Yamada', 'Sato', 'Minami',
14
+
15
+ 'Takahashi', 'Matsunaga', 'Yasuda', 'Adachi', 'Nagata']
16
+
17
+
18
+
19
+ while True:
20
+
21
+ teams = [random.sample(lst, 10) for _ in range(3)]
22
+
23
+ group = [(team[:3], team[3:6], team[6:]) for team in teams]
24
+
25
+ freq = [len([t for team in group for tm in team for t in tm if name in tm]) - 2
26
+
27
+ - len(set([t for team in group for tm in team for t in tm if name in tm])) for name in lst]
28
+
29
+ if max(freq) <= 1 and freq.count(1) <= 6:
30
+
31
+ break
32
+
33
+
34
+
35
+ print(*group, sep='\n')
36
+
37
+ print('(名前, 重複回数) =', *zip(lst, freq))
38
+
39
+ ```
40
+
41
+
42
+
43
+ 以下、前回までの回答です。
44
+
45
+
46
+
1
47
  random.sample を使うとこんな感じです。
2
48
 
3
49
 

1

コードの改善

2021/09/14 12:44

投稿

lehshell
lehshell

スコア1156

test CHANGED
@@ -1,6 +1,28 @@
1
1
  random.sample を使うとこんな感じです。
2
2
 
3
3
 
4
+
5
+ 無駄な処理をなくしました。
6
+
7
+ ```Python
8
+
9
+ import random
10
+
11
+
12
+
13
+ lst = ['Tanaka', 'Suzuki', ... 'Nagata']
14
+
15
+ teams = [random.sample(lst, 10) for _ in range(3)]
16
+
17
+ for team in teams:
18
+
19
+ print(team[:3], team[3:6], team[6:])
20
+
21
+ ```
22
+
23
+
24
+
25
+ 以前のコードです。
4
26
 
5
27
  ```Python
6
28