x = np.array([[0,1,11],[0,2,11],[0,3,10],[0,4,10],[0,5,9],[0,6,9],[1,7,9],
[1,5,11],[1,6,11],[2,7,11],[2,8,10]])
我对此很新,所以我会打电话给这样的事[element1,element2,element3]
我有一个如上所示的数组,我想找到这个数组的解决方案。 它应该满足以下条件:
第一个元素0:
它应该至少有一个来自[0,1,11],[0,2,11],[0,3,10],[0,4,10],[0,5,9],[0,6,9]
第一个元素1:
这:[1,7,9],[1,5,11],[1,6,11]
第一个元素2:
并且:[2,7,11],[2,8,10]
这样第二个元素和第三个元素对于每个解决方案都是唯一的(其中第一个元素= 0,第二个元素= 1,第三个元素= 2)
o / p可以是:
[0,1,11]
和[1,7,9]
以及[2,8,10]
错误的输出:
[0,1,11], [1,6,11] ,[2,8,10]
这里第一个和第二个参数3是相同的。
答案 0 :(得分:0)
如果我理解正确,您希望从给定的x
数组生成三元组,以便第一个,第二个和第三个元素在一个三元组中都是唯一的。代码来做到这一点:
import itertools
x = [[0,1,11],[0,2,11],[0,3,10],[0,4,10],[0,5,9],[0,6,9],[1,7,9],
[1,5,11],[1,6,11],[2,7,11],[2,8,10]]
triplets = itertools.combinations(x,3)
for t in triplets:
isGood = True
for pos in range(3):
if (t[0][pos] == t[1][pos] or t[0][pos] == t[2][pos] or t[1][pos] == t[2][pos]):
isGood = False
if (isGood):
print(repr(t))
这会产生以下输出:
([0, 1, 11], [1, 7, 9], [2, 8, 10])
([0, 2, 11], [1, 7, 9], [2, 8, 10])
([0, 5, 9], [1, 6, 11], [2, 8, 10])
([0, 6, 9], [1, 5, 11], [2, 8, 10])
更多的pythonic解决方案,仅在3行中完成相同的操作
for t in itertools.combinations(x,3):
if all(len(col) == len(set(col)) for col in zip(*t)):
print(repr(t))
疯狂的单行:
print(''.join(repr(t) + '\n' for t in itertools.combinations(x,3) if all(len(col) == len(set(col)) for col in zip(*t))))