Comment identifier des communs entre plusieurs lignes
Oro
-
Oro -
Oro -
Bonjour,
Voici ma table en entrée :
["1003","2001","2002"]
["1001","2001"]
["3000","6000"]
["5000","3000"]
J'aimerais reunir toutes les lignes ou il y a un identifiant commun et avoir en sortie :
["1003","2001","2002","1001"]
[["3000","6000","5000"]
Avez vous des idées ?
Merci
Voici ma table en entrée :
["1003","2001","2002"]
["1001","2001"]
["3000","6000"]
["5000","3000"]
J'aimerais reunir toutes les lignes ou il y a un identifiant commun et avoir en sortie :
["1003","2001","2002","1001"]
[["3000","6000","5000"]
Avez vous des idées ?
Merci
A voir également:
- Comment identifier des communs entre plusieurs lignes
- Partager des photos en ligne - Guide
- Identifier appareil avec adresse mac - Guide
- Écrire plusieurs lignes dans une cellule excel mac - Guide
- Call identifier 2.08 - Télécharger - Téléphonie & Visio
- Identifier un tableau à partir d'une photo - Forum Graphisme
1 réponse
Bonjour,
Elles ont toutes un point commun, le 0.
Problème résolu.
Faudrait en dire plus sur ce que tu veux obtenir, pour ma part je n'arrive pas à saisir ce qui doit faire passer de ta liste1 à ta liste2.
Parce que si faut exclure le 0 des points communs, alors pourquoi 3000, 6000 et 5000 doivent se retrouver ensemble ?
Elles ont toutes un point commun, le 0.
Problème résolu.
Faudrait en dire plus sur ce que tu veux obtenir, pour ma part je n'arrive pas à saisir ce qui doit faire passer de ta liste1 à ta liste2.
Parce que si faut exclure le 0 des points communs, alors pourquoi 3000, 6000 et 5000 doivent se retrouver ensemble ?
ce qui est commun entre ligne 1 et ligne 2 c'est l"identifiant : 2001.
Donc je considère que les individus dans la ligne et la ligne 2 appartiennent au même ensemble. Et j'aimerais justement regrouper les id de cet ensemble sur la même ligne
Car imagine que si par exemple on ajooute à ta liste ["3000", "2001", "4005"], et que l'on fasse des ensembles dans l'ordre de la liste, on obtiendrait :
Alors que tout devrait être groupé.
Donc il faut refaire des passages jusqu'il ne soit plus possible de grouper des lignes.
Puis comme tu parles d'ensembles, en python il y a les sets qui vont faciliter un peu les opérations de comparaisons.
Une première approche serait de faire une fonction du style.
def lines_group(table): # Transformation des lignes de la table en set groups = [set(l) for l in table] while True: # Parcours des lignes des groupes sauf la dernière for i, group in enumerate(groups[:-1]): # Parcours des lignes suivant la ligne courante for group2 in groups[i+1:]: # Si point commun entre les 2 if group & group2: # Ajout au group courant, celui qui suit group |= group2 # suppression du group2 des groupes groups.remove(group2) # Interruption pour recommencer le tout break else: continue break else: # Si pas de break dans le for, break du while break # Trnasformation des sets en listes return [list(g) for g in groups] table = [ ["1003","2001","2002"], ["1001","2001"], ["3000","6000"], ["5000","3000"], ] print(lines_group(table))J'ai pas testé plus que ça, à voir si ça groupe bien toutes tes lignes.