MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Sorting a list of pairs on the second elements

  • To: mathgroup at smc.vnet.net
  • Subject: [mg51318] Sorting a list of pairs on the second elements
  • From: János <janos.lobb at yale.edu>
  • Date: Thu, 14 Oct 2004 06:36:13 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Hi,

I have a list, for example
In[101]:=
collectedDnaBin

Out[101]=
{{gggcggcgacctcgcgggttttcgctatttatgaaaattttccggtttaaggcgtttccgttcttcttcg 
tcataa\
cttaatgtttttatttaaaatacc,1},{\
tatttttgtaattcaatactgcttcttcttgcctttgcggaatttggccttttaaaagtatttatcg,13}, 
{\
tatttttgtaattcaatactgcttcttcttgcctttgcggaatttggccttttaaa,12},{\
tatttttgtaattcaatactgcttcttctt,11},{aaattttccggtttaaggcgtttccgttcttcttcg 
tca,\
122},{aaattttccggtttaaggcgtttccgttctt,121},{ttcttgcctttgcgg,1211},{\
actgcttcttcttgcctttgcggaatttg,1221},{\
gctatttatgaaaattttccggtttaaggcgtttccgttcttcttcgtcataa,133},{
    
gctatttatgaaaattttccggtttaaggcg,132},{gctatttat,131},{gcggaatttggcctttta 
aa,\
1321},{aaattttcc,13211},{aatactgcttcttcttgcctttgcggaatttggccttttaaaagt,1 
331},{
     tgaaaattttccggttt,13311}}

It is a list of pair of Strings.  I would like to Sort it on the second  
elements of the pairs.
I can do the naive approach with:
In[109]:=
Map[Reverse,Sort[Map[Reverse,collectedDnaBin]]]

Out[109]=
{{gggcggcgacctcgcgggttttcgctatttatgaaaattttccggtttaaggcgtttccgttcttcttcg 
tcataa\
cttaatgtttttatttaaaatacc,1},{tatttttgtaattcaatactgcttcttctt,11},{\
tatttttgtaattcaatactgcttcttcttgcctttgcggaatttggccttttaaa,12},{
     aaattttccggtttaaggcgtttccgttctt,121},{ttcttgcctttgcgg,1211},{\
aaattttccggtttaaggcgtttccgttcttcttcgtca,122},{actgcttcttcttgcctttgcggaat 
ttg,\
1221},{tatttttgtaattcaatactgcttcttcttgcctttgcggaatttggccttttaaaagtatttat 
cg,13}\
,{gctatttat,131},{gctatttatgaaaattttccggtttaaggcg,132},{gcggaatttggccttt 
taaa,\
1321},{aaattttcc,13211},{\
gctatttatgaaaattttccggtttaaggcgtttccgttcttcttcgtcataa,133},{\
aatactgcttcttcttgcctttgcggaatttggccttttaaaagt,1331},{tgaaaattttccggttt,1 
3311}}

and it does the job, but I am wondering if it can be done by  
Sort[list,func] where func would tell Sort to do the sorting of the  
pairs by the second elements.  I tried from Ted Érsek's excellent page  
http://www.verbeia.com/mathematica/tips/HTMLLinks/Tricks_P-Z_22.html

Sort[collectedDnaBin,#1[[2]] < #2[[2]] &] but that does not want to do  
the trick for me.  The Mapping of RoteteLeft and RotateRight, which is  
a generalization of my naive approach above, he shows on the same page,  
does it, but I do not know how to put that into Sort as second  
argument.  Maybe I should not, but rather to write a mySort function  
based upon his idea... ?

In general, if I have a list whose elements are m-member lists, like  
{{a1,...,am},...,{z1,...,zm}}, then my question is what is the  
best/fastest way to sort it on the k-th elements of the members where  
1<=k<=m and ak,...,zk are arbitrary objects - in my case Strings - and  
use as little memory for it as possible.


Thanks ahead,

János
----------------------------------------------
Trying to argue with a politician is like lifting up the head of a  
corpse.
(S. Lem: His Master Voice)


  • Prev by Date: NMinimize inconsistencies
  • Next by Date: Re: Eigenvalues and eigenvectors of a matrix with nonpolynomial elements.
  • Previous by thread: Re: PDE Notation options (one works the other does not)
  • Next by thread: Re: Sorting a list of pairs on the second elements