我想编写一个函数来计算 2n 个用户的所有可能分配向量,其中 n 个用户分配到组 0(控制),n 个用户分配到组 1(治疗)。
我尝试了一种递归方法,如下所示,但我知道它不能像这样工作(我认为我应该有 C(2n,n) 向量,对吧?)
有什么想法吗?
谢谢。
def algo(n):
T = list();
if n>=2 :
for j in range(len(algo(n-1))/2):
T.append([0,1]+algo(n-1)[j]);
for j in range(len(algo(n-1))/2):
T.append([1,0]+algo(n-1)[j]);
for j in (len(algo(n-1)/2):(len(algo(n-1)*(3/4)):
T.append([0,0]+algo(n-1)[j]);
for j in range(len(algo(n-1))):
T.append([1,1]+algo(n-1)[j]);
if n==1 :
T=[[0,1],[1,0],[0,0],[1,1]];
return T
最佳答案
import itertools
def split_users(users_list):
users = set(users_list)
for comb in itertools.combinations(users, int(len(users)/2)):
control = set(comb)
treatment = users - control
yield control, treatment
users = {"A", "B", "C", "D", "E", "F"}
for control, treatment in split_users(users):
print "Control", control, "treatment", treatment
用两个词来说:split_users
是一个生成器函数,它从用户列表中获取count_of_users/2
元素的所有可能组合,并将它们分配给control
组,然后将其余所有视为 治疗
组。
引用set , itertools和 yield有关详细信息的文档。
另外,请注意,无论您所说的“用户”是什么意思,都需要是可哈希的。因此,如果用户表示为自定义类,则需要定义 __hash__
和 __eq__
功能。
关于python - 2n 个用户的所有可能的分配向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23779576/