[英]Python set types to vectors without repetitions
我有k个向量和k类型,其中每个向量的长度为n。 n> k。
我需要将类型放在向量中,这样对于每个索引,我应该为每个向量使用不同的类型。 类型的总数应该在向量之间相等“。
例如,如果类型是
[“H”,“M”,“L”](k = 3,n = 6)
这是有效的:
v1 = ["H", "H","M","M","L","L"] , v2 = ["L", "L","H","H","M","M"], v3 = ["M", "M","L","L","H","H"]
但这是无效的:
v1 = ["H", "H","M","M","L","L"] , v2 = ["L", "H","L","H","M","M"], v3 = ["M", "M","L","L","H","H"]
因为
v1 [1] == v2 [1]
这样做的最佳方法是什么?
谢谢!
当n
是k
的倍数时,此代码将生成满足约束的向量列表:
t = ["A", "B", "C", "D"]
n = 8
k = len(t)
vectors = [[t[(j+i)%k] for j in range(0,n)] for i in range(0,k)]
for v in vectors:
print(v)
当n
不是k
的倍数时,问题没有解决方案。 例如,使用[“A”,“B”](k = 2,n = 3),无法创建两个向量,使得每个索引包含不同的类型,并且每个类型包含相同数量的每个类型。 这里是满足第一个约束的所有可能的向量对,但是,没有一个满足第二个约束:
AAA AAB ABA ABB BAA BAB BBA BBB
BBB BBA BAB BAA ABB ABA AAB AAA
我尝试使用k
和n
其他值并且同样的事情发生:我们可以在每个索引处实现不同的类型,但是不可能在每个向量中具有相同数量的每种类型。 原因是对于给定的索引,类型都是不同的(并且有k
种类型)。 但由于所有向量都需要包含相同数量的每种类型,因此所有向量必须在某处具有所有k
元素的副本。 如果我们决定重复一种类型,那么我们将不得不重复所有类型,因此n
必然是k
的倍数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.