1
votes

Recherche de toutes les associations complètes possibles à partir d'une liste dans Google Sheets

J'ai une seule liste de noms et j'aimerais générer toutes les combinaisons possibles, où chaque personne de la liste est associée de manière unique, de manière non répétitive, à l'aide de Google Sheets. La liste des noms est variable et peut parfois être un nombre impair. Par exemple, si j'avais quatre personnes, la liste ressemblerait à ceci, seuls les nombres seraient remplacés par les noms réels.

(1,2)(3,4)

(1,3)(2,4)

(1,4)(2,3)

Une fois que j'ai la liste complète des combinaisons, je peux la trier moi-même pour trouver ceux qui ont été les moins utilisés auparavant.


0 commentaires

3 Réponses :


3
votes

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

Si vous voulez à la fois (nom1, nom2) et (nom2, nom1) essayez itertools.permuations


0 commentaires

0
votes
=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 commentaires

0
votes

Merci à tous pour votre aide. Je pense que ma requête manquait de détails. J'espérais un résultat de table, où chaque ligne était un résultat complet de chaque personne / chaîne étant associée à une autre chaîne individuellement. Je suis mauvais en codage, donc j'ai été inspiré pour le faire en python, en utilisant une fonction récursive et un peu de magie mathématique. J'ai pu lui faire accepter une liste de variables et l'agrandir en conséquence.

['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']

Et les résultats semblent assez proches de ce que j'espérais, sinon nécessairement joli.

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

Nos sincères remerciements à tous ceux qui peuvent m'aider à améliorer et à importer les résultats dans des feuilles Google


0 commentaires