Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
688 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  comment comparer deux listes?? [autre question...]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comment comparer deux listes?? [autre question...]

n°1038444
babarpapa
Posté le 07-04-2005 à 09:09:57  profilanswer
 

Bonjour, je débute en perl et je suis en train de faire un script où à un moment, je dois comparer deux listes d'éléments. Les éléments du tableau, étant des noms de gènes..ex : CX038409,BX886823,BX076624,CX033076....
les tableaux contient entre 8 et 30 éléments et c'est complètement variable.
je dois essayer de coder qqchose pour comparer deux listes et voir si elles ont au moins 8 éléments en commun.
J'espère que j'ai été a peu près clair....  :pt1cable:  
Donc en fait, j'aimerai savoir s'il existe une fonction qui peut comparer deux listes...j'y crois pas trop ou si vous aviez une idée pour faire qqchose le plus léger possible?
merci beaucoup de votre aide  :jap:


Message édité par babarpapa le 08-04-2005 à 13:53:43

---------------
http://festivaldujeu-montpellier.org/
mood
Publicité
Posté le 07-04-2005 à 09:09:57  profilanswer
 

n°1038504
pospos
Posté le 07-04-2005 à 10:18:56  profilanswer
 

des que tu veux faire des comparaisons, ou simplement etre certain que les elements de ton tableau son uniques (pas deux elements identiques) tu a interet à utiliser des tables de hash plutot que des listes.
Donc ici le plus simple est de mtransformer tes deux listes en hash et de les merger en un seul hash. si le nombre de cle est inferieur à la somme des deux tableaux alors il y a des elements communs entre les deux listes (attention ca ne marche pas si tes listes comportent deja des doublons, dans ce cas il faut les passer en hash avant de compter leurs clés respectives)
 

Code :
  1. my %hash = map{$_ => 1} (@tab1, @tab2);
  2. my @tab = keys %hash;
  3. my $nombre_elements_commun = @tab1 + @tab2 - @tab;


Message édité par pospos le 07-04-2005 à 11:04:59
n°1038575
babarpapa
Posté le 07-04-2005 à 10:57:29  profilanswer
 

merci beaucoup pour ta réponse!
je vais étudier ta solution qui a l'air super bien. Mais liste ne peuvent pas contenir de doublons, mais par contre, il é tres probable quelles ne fassent pas la meme taile, pas grave?


---------------
http://festivaldujeu-montpellier.org/
n°1038586
pospos
Posté le 07-04-2005 à 11:03:58  profilanswer
 

non pas grave
la ca va te permettre de connaitre le nombre d'elements communs
 
si tu veux connaitre quels elements sont communs il faut proceder un peu autrement
 
PS: j'avais inversé le signe de $nombre_elements_commun dans l'exemple


Message édité par pospos le 07-04-2005 à 11:05:56
n°1038602
babarpapa
Posté le 07-04-2005 à 11:08:10  profilanswer
 

ok, merci pour ton aide précieuse ;)


---------------
http://festivaldujeu-montpellier.org/
n°1038665
babarpapa
Posté le 07-04-2005 à 11:31:01  profilanswer
 

ça marche nickel!!
merci encore! ;)


---------------
http://festivaldujeu-montpellier.org/
n°1039974
babarpapa
Posté le 08-04-2005 à 13:44:06  profilanswer
 

autre petit question, est ce que tu crois qu'il y aurait moyen de récupérer les éléments qui était commun au deux tableau dans un autre tableau?  
merci

n°1040393
pospos
Posté le 08-04-2005 à 16:18:28  profilanswer
 

Code :
  1. my %seen;
  2. my @commun = grep {$seen{$_}++} @tab1, @tab2;


encore une fois ca ne marche que si tu est certain que tes listes ne contiennent pas de doublon.

n°1040403
pospos
Posté le 08-04-2005 à 16:22:13  profilanswer
 

et evidemment ca te donne egalement la reponse à ta premiere question (de maniere plus simple et plus rapide en plus):
 
my $nombre_elements_commun = @commun;

n°1040435
babarpapa
Posté le 08-04-2005 à 16:44:58  profilanswer
 

ouf! c'est trop puissant pour moi! lol
c'est niquel, il n'y a pa de doublon, c'est sur.
encore une fois, je te remercie bcp! :)


---------------
http://festivaldujeu-montpellier.org/
mood
Publicité
Posté le 08-04-2005 à 16:44:58  profilanswer
 

n°1042627
pospos
Posté le 11-04-2005 à 09:52:36  profilanswer
 

recu en pm:

babarpapa a écrit :

j'ai une petite question sur les 2 lignes de codes que tu m'a donné stp.
quand tu mets my @commun = grep {$seen{$_}++} @tab1, @tab2;
je comprends pas très bien comment marche le $seen{$_}++?
peux tu m'expliquer très rapidement stp?
je te remercie


 
alors, l'instruction grep sert à filtrer le (ou les) tableau donné en parmatetre en ne conservant que les elements qui retourne "vrai" dans le test entre accolades. chaque element est passé dans la variable $_. Ici on utilise une table de hash %seen (qui faut reinitialiser à chaque fois) qui permet de savoir quels element du tableau sont deja passé dans le filtre: à chaque fois qu'on vois passer un element on increment sa valeur dans le tableau. la post incrementation ($val++) a la particularité de retourner la valeur de la variable AVANT incrementation, donc si $seen{blabla} valais 0 avant son passage dans le filtre (c'est à dire si on avait pas encore vu passer 'blabla'), alors le test retrourne 0 et "blabla" est donc filtre. mais maintenant $seen{blabla} vaut 1. la fois suivant ou l'on verra "blabla" $seen{blabla} vaudra 1 (tout comme $seen{blabla}++) et "blabla" sera donc conservé.

n°1042629
babarpapa
Posté le 11-04-2005 à 09:56:39  profilanswer
 

explication très clair. maintenant, j'ai tout à fait compris!  
encore une fois merci pour ton aide et ta rapidité ;)

n°1043227
matafan
Posté le 11-04-2005 à 17:08:22  profilanswer
 

Ingenieuse ta solution pospos, jolie utilisation de grep.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  comment comparer deux listes?? [autre question...]

 

Sujets relatifs
Espacement entre une puce et ce qui suit (listes)Listes chaînées SANS utiliser Malloc
question sur les tableaux[eclipse] question purge history
question bête sur les fichier[R] question grahique
Comparer date SQL/Date du jourquestion bateau: ecrire un retour ligne dans fichier
[php] question de conception, localisation[J2ME] question sur les bouton d'actions
Plus de sujets relatifs à : comment comparer deux listes?? [autre question...]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR