|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Membre à l'essai
![]() Inscription : janvier 2012 Messages : 54 ![]() |
Bonjour à tous,
voici actuellement un exemple de ce qu'est sencé faire le script sur lequel je travail. Je dispose d'un fichier contenant 2 colonnes : des IDs et et des chiffres qui leurs sont associés. Citation:
Mon but est de récupérer toutes les combinaisons d'IDs pour lesquels la différence de leur nombres associés ne dépasse pas un certain seuil (mettons 10 pour l'exemple). Dans cet exemple on récupérerait 2 et 5 car 13 - 4 = 9 ou 4 - 13 = -9. J'ai donc conçu un code me permettant de récupérer dans une liste toutes les différences qui m'intéressaient, cependant je n'ai plus accès à la première colonne (correspondant aux IDs, et je n'arrive pas à remonter jusqu'à ces derniers). J'ai pensé à utiliser des dictionnaires imbriqués mais je ne trouve pas de solution efficace. Voici mon code : Code :
Est'il possible d'y parvenir en utilisant les listes ? J'avais pensé à l'utilisation de dictionnaires imbriqués mais je me suis toujours limité à des cas "simples" d'utilisation de dictionnaires, je suis donc un peu perplexe quant à l'utilisation de cette méthode, j'avais pensé à quelque chose comme ça : Code :
di = {ID:{'soustraction1'="ID1",'soustraction2'=ID1}}... |
|||
|
|
00
|
|
|
#2 | ||
|
Membre émérite
![]() ![]() Inscription : octobre 2008 Messages : 579 ![]() |
Salut,
Je trouve ceci bizarre: je suppose que c'est col[1] quoiqu'il en soit, tu peux directement conserver tes index lors de la soustraction. Dans un set pour éviter les inverses: Code :
|
||
|
|
00
|
|
|
#3 | |||||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Voici mon fichier test Code :
- l'identifiant 2 est associé avec 5, 8 et 9 - l'identifiant 5 est associé avec 2, 8 et 9 - l'identifiant 8 est associé avec 2, 5 et 9 - l'identifiant 9 est associé avec 2, 5 et 8 Donc voici mon code Code python :
Et ce que ça donne Code :
{1: [], 2: [5, 8, 9], 3: [], 4: [], 5: [2, 8, 9], 6: [], 7: [], 8: [2, 5, 9], 9: [2, 5, 8]}
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||||
|
|
00
|
|
|
#4 | |||||||||
|
Membre Expert
![]() ![]() Inscription : décembre 2007 Messages : 1 435 ![]() |
Bonjour,
Si j'ai bien compris le problème, je crois avoir trouvé une solution. Considérons que nous avons déjà extrait la simple liste des nombres terminaux dans l'ordre, et que nous avons défini le seuil: Code :
Code :
Et la "remontée" aux indices initiaux est facile aussi. Si on crée la même combinaison des nombres de la liste [0,1,2,3,4,5,6] pris 2 à 2, on trouvera: Code :
=> le 4 vient donc de l'indice 1 de la liste initiale et => le 13 de l'indice 4 de la liste initiale Voilà la récap du code: Code :
Citation:
__________________
Tant que les ordinateurs ne trouvent pas eux-mêmes les prises de courant, nous avons des chances de maitriser la situation Mes recettes python et linux: http://www.jpvweb.com |
|||||||||
|
|
00
|
|
|
#5 | |
|
Membre à l'essai
![]() Inscription : janvier 2012 Messages : 54 ![]() |
Merci à tous pour vos réponses et pour le temps que vous avez consacré à mon problème. Je vais de ce pas étudier vos solutions
Citation:
Malgrès mes piètres explications vous avez cernés le soucis, j'aurai dû matérialiser le problème autrement, on peut imaginer que les IDs correspondent à des numéros de coureurs et que les nombres représentent leurs positions kilométriques, je veux donc récupérer les couples de coureurs qui sont séparés par une distance X. |
|
|
|
00
|
|
|
#6 |
|
Membre à l'essai
![]() Inscription : janvier 2012 Messages : 54 ![]() |
Merci encore pour vos codes ils m'ont beaucoup aidé et j'ai appris des choses (je ne connaissais pas la fonction valeur absolue (shame on me), j'ai découvert le module "combinations" qui est en effet très efficace et simple d'utilisation, il a juste fallut que je cast la soustraction et que je remplace le type des outputs en %s.
Merci encore, Bonne journée |
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() Inscription : mars 2007 Messages : 772 ![]() |
Pourquoi pas un petit algo en O(n*log(n)) tant qu'à faire ?
(du moins tant que le nombre de couples sélectionnés reste petit par rapport au nombre de couples possibles): Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com