我有一份问题清单,我需要以不同的格式提出每个问题。
(每个项目具有M个可能排列的N个项目的列表)。
e.g。
questions = [a, b, c]
permutations = [x, y]
permuted_questions = [(a,x), (b,x), (c,x), (a,y), (b,y), (c,y)]
如上所述生成简单的排列列表非常简单。然而, 为了使列表更加有趣",我想以某种方式改变它。
问题是排列列表严格按排序。即对于给定项目a
,排列(a,x)
应始终出现在排列(a,y)
之前。
e.g。
[(a,x), (b,x), (a,y), (c,x), (b,y), (c,y)]
是有效的随机播放
[(a,x), (b,y), (a,y), (c,x), (b,x), (c,y)]
无效,因为(b,y)
(b,x)
有什么建议吗?
答案 0 :(得分:1)
你可以简单地将问题混合到任何排列中,然后通过标记第一个“a”问题x和第二个“a”问题y来对列表进行后处理,依此类推其他类型的问题。
e.g:
Construct shuffle:
(a,x), (b,y), (a,y), (c,x), (b,x), (c,y)
Turn into valid shuffle:
(a,x), (b,x), (a,y), (c,x), (b,y), (c,y)
示例Python代码:
from random import shuffle
from itertools import product
from collections import defaultdict
questions = ['a', 'b', 'c']
permutations = ['x', 'y']
Q = list(product(questions,permutations))
shuffle(Q)
D = defaultdict(int) # Keep track of permutation to use for each question
C = []
for q,p in Q:
C.append( (q,permutations[D[q]]) )
D[q] += 1
print C