如果我有25個資料:是部門+姓名,其中有些人是來自同一個部門的,現在要分為5個小組,5*5=25,要求,每小組中不能重復同一個部門的。
部門 姓名
A 姓名01
B 姓名02
A 姓名03
D 姓名04
E 姓名05
F 姓名06
G 姓名07
H 姓名08
I 姓名09
J 姓名10
K 姓名11
L 姓名12
E 姓名13
N 姓名14
O 姓名15
P 姓名16
Q 姓名17
H 姓名18
S 姓名19
T 姓名20
A 姓名21
O 姓名22
W 姓名23
Q 姓名24
Y 姓名25
要分為
分組方法一,錯誤,要重分(因為第一小組中有兩個人來自同一個部門)
第1組 第2組 第3組 第4組 第5組
A 姓名01 F 姓名06 K 姓名11 P 姓名16 A 姓名21
B 姓名02 G 姓名07 L 姓名12 Q 姓名17 O 姓名22
A 姓名03 H 姓名08 E 姓名13 H 姓名18 W 姓名23
D 姓名04 I 姓名09 N 姓名14 S 姓名19 Q 姓名24
E 姓名05 J 姓名10 O 姓名15 T 姓名20 Y 姓名25
---------------------
分法二:
分組方法二,對了,因為每個小組沒有重復部門的
第1組 第2組 第3組 第4組 第5組
F 姓名06 A 姓名01 K 姓名11 P 姓名16 A 姓名21
B 姓名02 G 姓名07 L 姓名12 Q 姓名17 O 姓名22
A 姓名03 H 姓名08 E 姓名13 H 姓名18 W 姓名23
D 姓名04 I 姓名09 N 姓名14 S 姓名19 Q 姓名24
E 姓名05 J 姓名10 O 姓名15 T 姓名20 Y 姓名25
uj5u.com熱心網友回復:
應該還可以精簡,但是顧不上了,湊合用吧num = '''A 姓名01
B 姓名02
A 姓名03
D 姓名04
E 姓名05
F 姓名06
G 姓名07
H 姓名08
I 姓名09
J 姓名10
K 姓名11
L 姓名12
E 姓名13
N 姓名14
O 姓名15
P 姓名16
Q 姓名17
H 姓名18
S 姓名19
T 姓名20
A 姓名21
O 姓名22
W 姓名23
Q 姓名24
Y 姓名25'''
import random
num1, num2, num3, num4, num5 = [], [], [], [], []
number = []
while True:
new_num = num.split(sep='\n')
num1.clear()
num2.clear()
num3.clear()
num4.clear()
num5.clear()
number.clear()
for i in range(5):
i = random.choice(new_num)
new_num.remove(i)
num1.append(i)
number.append(i[0])
if len(number) != len(set(number)):
continue
number.clear()
for i in range(5):
i = random.choice(new_num)
new_num.remove(i)
num2.append(i)
number.append(i[0])
if len(number) != len(set(number)):
continue
number.clear()
for i in range(5):
i = random.choice(new_num)
new_num.remove(i)
num3.append(i)
number.append(i[0])
if len(number) != len(set(number)):
continue
number.clear()
for i in range(5):
i = random.choice(new_num)
new_num.remove(i)
num4.append(i)
number.append(i[0])
if len(number) != len(set(number)):
continue
number.clear()
for i in range(5):
i = random.choice(new_num)
new_num.remove(i)
num5.append(i)
number.append(i[0])
if len(number) != len(set(number)):
continue
break
print(num1)
print(num2)
print(num3)
print(num4)
print(num5)
uj5u.com熱心網友回復:
s = '''A 姓名01B 姓名02
A 姓名03
D 姓名04
E 姓名05
F 姓名06
G 姓名07
H 姓名08
I 姓名09
J 姓名10
K 姓名11
L 姓名12
E 姓名13
N 姓名14
O 姓名15
P 姓名16
Q 姓名17
H 姓名18
S 姓名19
T 姓名20
A 姓名21
O 姓名22
W 姓名23
Q 姓名24
Y 姓名25'''
li = s.split("\n")
lx = []
for j in range(4):
for i in range(len(li)):
if(li[i][0] not in [x[0] for x in lx]):
lx.append(li.pop(i))
if(len(lx)==5):
print(str(j+1)+"組:\n","\n".join(lx))
lx.clear()
break
print("5組:\n","\n".join(li))
uj5u.com熱心網友回復:
感覺代碼還是有點多,應該還可以少點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/150415.html
