从Google表格中的列表中查找所有可能的完整配对

时间:2019-06-13 23:49:36

标签: google-apps-script google-sheets google-sheets-formula array-formulas google-sheets-query

我只有一个名称列表,我想生成每种可能的组合,其中列表中的每个人都使用Google表格以非重复的方式唯一地配对。名称列表是可变的,有时可能是奇数。 因此,例如,如果我有四个人,则列表将如下所示,只有数字将被替换为实际名称。

var api = this.api(), data;

一旦有了完整的组合列表,我就可以自己对它进行排序,以找出以前使用最少的组合。

3 个答案:

答案 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)

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))

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表格中的人