Поиск всех возможных полных пар из списка в Google Sheets - PullRequest
1 голос
/ 14 июня 2019

У меня есть один список имен, и я хотел бы сгенерировать каждую возможную комбинацию, где каждый человек в списке уникально, неповторяющимся образом соединен, используя Google Sheets. Список имен является переменным и может иногда быть нечетным числом. Так, например, если бы у меня было четыре человека, список выглядел бы так, только цифры были бы заменены фактическими именами.

(1,2)(3,4)

(1,3)(2,4)

(1,4)(2,3)

Когда у меня есть полный список комбинаций, я могу сам отсортировать его, чтобы найти, какие из них использовались меньше всего.

Ответы [ 3 ]

2 голосов
/ 14 июня 2019

Попробуйте 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 ))

Если вы хотите, чтобы (имя1, имя2) и (имя2, имя1) попробуйте itertools.permuations

0 голосов
/ 15 июня 2019

Спасибо всем за помощь. Я думаю, что мой запрос не был подробно Я надеялся на результат таблицы, где каждая строка была полным результатом каждого человека / строки, соединенной с другой строкой индивидуально. Я плохо разбираюсь в программировании, поэтому я был вдохновлен сделать это на 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

0 голосов
/ 14 июня 2019
=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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...