我只有一个名称列表,我想生成每种可能的组合,其中列表中的每个人都使用Google表格以非重复的方式唯一地配对。名称列表是可变的,有时可能是奇数。 因此,例如,如果我有四个人,则列表将如下所示,只有数字将被替换为实际名称。
var api = this.api(), data;
一旦有了完整的组合列表,我就可以自己对它进行排序,以找出以前使用最少的组合。
答案 0 :(得分:2)
尝试python itertools。 https://docs.python.org/2/library/itertools.html
import itertools
nameList = ['john', 'joe', 'jimmy', 'jack']
for name1, name2 in itertools.combinations( nameList, 2 ):
print( '({}, {})'.format( name1, name2 ))
如果您同时想要(name1,name2)和(name2,name1),请尝试itertools.permuations
答案 1 :(得分:0)
=QUERY(ARRAYFORMULA(UNIQUE(
TRANSPOSE(SPLIT(REPT(CONCATENATE(A1:A4&CHAR(9)), COUNTA(A1:A4)), CHAR(9)))&" "&
TRANSPOSE(SPLIT(CONCATENATE(REPT(A1:A4&CHAR(9), COUNTA(A1:A4))), CHAR(9))))),
"select Col1 where Col1 is not null", 0)
=TRANSPOSE(QUERY(TRANSPOSE(QUERY(ARRAYFORMULA(UNIQUE(
TRANSPOSE(SPLIT(REPT(CONCATENATE(A1:A4&CHAR(9)), COUNTA(A1:A4)), CHAR(9)))&" "&
TRANSPOSE(SPLIT(CONCATENATE(REPT(A1:A4&CHAR(9), COUNTA(A1:A4))), CHAR(9))))),
"select Col1 where Col1 is not null", 0)),
"select Col2,Col3,Col4,Col7,Col8,Col12", 0))
答案 2 :(得分:0)
非常感谢您的帮助。我认为我的查询缺少详细信息。我希望得到一个表结果,其中每一行都是每个人/字符串与另一个字符串分别配对的彻底结果。 我不太擅长编码,因此受到启发,我在Python中使用了递归函数和一些数学向导。我能够使它接受变量列表并相应地扩展。
nameList = ['1', '2', '3', '4', '5']
if(len(nameList) % 2 == 1):
nameList.append(" ")
print(nameList)
length = len(nameList)
possible = 1
while length > 1:
possible = possible*(length-1)
length -= 2
def completeCombinations (List, line):
BaseList = list(List)
if (line % (len(List)-1) == 0):
num = (len(List)-1)
else:
num = line % (len(List)-1)
BaseList.remove(List[0])
BaseList.remove(List[num])
if(len(List) > 2):
CurrentList = list(completeCombinations(BaseList, line))
CurrentList.insert(0, List[num])
CurrentList.insert(0, List[0])
else:
CurrentList = list(List)
return CurrentList
i = 1
while i < possible:
print completeCombinations(nameList, i+1)
i += 1
结果看起来与我希望的非常接近,即使不一定很完美。
['1', '2', '3', '4', '5', ' ']
['1', '3', '2', '5', '4', ' ']
['1', '4', '2', ' ', '3', '5']
['1', '5', '2', '3', '4', ' ']
['1', ' ', '2', '4', '3', '5']
['1', '2', '3', ' ', '4', '5']
['1', '3', '2', '4', '5', ' ']
['1', '4', '2', '5', '3', ' ']
['1', '5', '2', ' ', '3', '4']
['1', ' ', '2', '3', '4', '5']
['1', '2', '3', '5', '4', ' ']
['1', '3', '2', ' ', '4', '5']
['1', '4', '2', '3', '5', ' ']
['1', '5', '2', '4', '3', ' ']
['1', ' ', '2', '5', '3', '4']
衷心感谢任何能帮助我进行修饰并将结果导入到Google表格中的人