我正在试图计算出32个学生按8个表分组的最大排列数,每个表4个(非重复)。这是我到目前为止所提出的,但我希望有更多的可能性(数字代表学生ID):
1 32 30 26
2 1 31 27
3 2 32 28
4 3 1 29
5 4 2 30
6 5 3 31
7 6 4 32
8 7 5 1
9 8 6 2
10 9 7 3
11 10 8 4
12 11 9 5
13 12 10 6
14 13 11 7
15 14 12 8
16 15 13 9
17 16 14 10
18 17 15 11
19 18 16 12
20 19 17 13
21 20 18 14
22 21 19 15
23 22 20 16
24 23 21 17
25 24 22 18
26 25 23 19
27 26 24 20
28 27 25 21
29 28 26 22
30 29 27 23
31 30 28 24
32 31 29 25
学生必须彼此不同。请注意,例如,第1行的学生1如何再也不会遇到学生32,30或26。
我怎样才能用Python来解决这个问题?
答案 0 :(得分:1)
从您显示列的方式来看,您想要做的是创建一个包含32个学生范围的列表(1,33)然后您想要移动列表以便您拥有第二个列表
l1 = range(1, 33)
l2 = shift(l1, -1)
l3 = shift(l2, -2)
l4 = shift(l3, -4)
for i in range(0:len(l1)):
print l1[i], l2[i], l3[i], l4[i]
请注意,shift可以通过多种方式定义,包括使用collections.deque rotate()方法或
def shift(l, n):
return l[n:] + l[:n]