Home > Archive > Mathematica > April 2005 > Sort problem
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
|
|
| konstantpi@mail15.com 2005-04-21, 9:00 am |
| Hi
How to sort two lists such as:
age={30,12,60,20};
pple={"john","kate","peter","alice"};
to give the output:
age={12,20,30,60}
pple={"kate","alice","john","peter"}
ie: to keep every person opposite his age number.
thanks
| |
| Jens-Peer Kuska 2005-04-22, 9:00 am |
| Hi,
AgeSort[person : {__String}, age : {__Integer}] /;
Length[person] == Length[age] :=
Transpose[Sort[Transpose[{age, person}],
First[#1] < First[#2] &]]
{pple,age}=AgeSort[pple, age];
???
Regards
Jens
<konstantpi@mail15.com> schrieb im Newsbeitrag
news:d47suf$54n$1@smc.vnet.net...
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age
> number.
> thanks
>
| |
| Peter Pein 2005-04-22, 9:00 am |
| konstantpi@mail15.com wrote:
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>
age={30,12,60,20};
pple={"john","kate","peter","alice"};
{age,pple}=Transpose[Sort[Transpose[{age
,pple}]]];
age
pple
prints
{12, 20, 30, 60}
{"kate", "alice", "john", "peter"}
--
Peter Pein
Berlin
| |
| Bob Hanlon 2005-04-22, 9:00 am |
| age={30,12,60,20};
pple={"john","kate","peter","alice"};
{age,pple}=Transpose[Sort[Thread[{age,pp
le}]]]
{{12, 20, 30, 60}, {"kate", "alice", "john", "peter"}}
or
age={30,12,60,20};
pple={"john","kate","peter","alice"};
pple=pple[[Ordering[age]]]
{kate,alice,john,peter}
age=Sort[age]
{12,20,30,60}
Bob Hanlon
>
> From: konstantpi@mail15.com
> Date: 2005/04/21 Thu AM 05:36:11 EDT
> To: mathgroup@smc.vnet.net
> Subject: Sort problem
>
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>
>
| |
| Marcus Stollsteimer 2005-04-22, 9:00 am |
| konstantpi@mail15.com wrote:
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
Hi,
use Ordering[]
Regards,
Marcus
--
What is life but a series of inspired follies? -- George Bernard Shaw
| |
|
| Hi,
The ordered indices you get from "Ordering"(see help) and an element
from its index from "Part":
Part[#, Ordering[age]] & /@ {age, pple}
Sincerely, Daniel
konstantpi@mail15.com wrote:
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>
| |
| Caffa Vittorio Dr. 2005-04-22, 9:00 am |
| Try this:
In[1]:= age = {30, 12, 60, 20};
In[2]:= pple = {"john", "kate", "peter", "alice"};
In[3]:= {age, pple} = Transpose[Sort[Transpose[{age, pple}]]];
In[4]:= age
Out[4]= {12, 20, 30, 60}
In[5]:= pple
Out[5]= {kate, alice, john, peter}
Cheers, Vittorio
>-----Original Message-----
>From: konstantpi@mail15.com [mailto:konstantpi@mail15.com]
>Sent: Thursday, April 21, 2005 11:36 AM
>Subject: Sort problem
>
>Hi
>How to sort two lists such as:
>age={30,12,60,20};
>pple={"john","kate","peter","alice"};
>
>to give the output:
>age={12,20,30,60}
>pple={"kate","alice","john","peter"}
>
>ie: to keep every person opposite his age number.
>thanks
| |
| Sepulveda, Ariel 2005-04-22, 9:00 am |
| A few ideas on Sort:
age = {30, 12, 60, 20};
names = {"john", "kate", "peter", "alice"};
{age, names} // Sort
{age, names} // Sort // Transpose
Sort[{age, names} // Transpose, #1[[1]] < #2[[1]] &]
Sort[{age, names} // Transpose, #1[[1]] > #2[[1]] &]
Sort[{age, names} // Transpose, #1[[2]] < #2[[2]] &]
Sort[{age, names} // Transpose, #1[[2]] > #2[[2]] &]
Sort[{age, names} // Transpose, #1[[1]] < #2[[1]] &] // Transpose
Sort[{age, names} // Transpose, #1[[1]] > #2[[1]] &] // Transpose
Sort[{age, names} // Transpose, #1[[2]] < #2[[2]] &] // Transpose
Sort[{age, names} // Transpose, #1[[2]] > #2[[2]] &] // Transpose
-----Original Message-----
From: konstantpi@mail15.com [mailto:konstantpi@mail15.com]
Subject: Sort problem
Hi
How to sort two lists such as:
age={30,12,60,20};
pple={"john","kate","peter","alice"};
to give the output:
age={12,20,30,60}
pple={"kate","alice","john","peter"}
ie: to keep every person opposite his age number.
thanks
| |
| Jon Harrop 2005-04-22, 9:00 am |
| konstantpi@mail15.com wrote:
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
Combine the two lists into one list of pairs:
In[1]:= data = Transpose[{age, pple}]
Out[1]= {{30, john}, {12, kate}, {60, peter}, {20, alice}}
Then sort by comparing only the first part of each element:
In[1]:= Sort[data, First[#1] < First[#2] &]
Out[1]= {{12, kate}, {20, alice}, {30, john}, {60, peter}}
The extract the ages and people:
In[1]:= {age, pple} = {First /@ data, Last /@ data}
Out[1]= {{30, 12, 60, 20}, {john, kate, peter, alice}}
--
Dr Jon D Harrop, Flying Frog Consultancy
http://www.ffconsultancy.com
| |
| Wolf, Hartmut 2005-04-22, 9:00 am |
|
>-----Original Message-----
>From: konstantpi@mail15.com [mailto:konstantpi@mail15.com]
>Sent: Thursday, April 21, 2005 11:36 AM
>Subject: Sort problem
>
>Hi
>How to sort two lists such as:
>age={30,12,60,20};
>pple={"john","kate","peter","alice"};
>
>to give the output:
>age={12,20,30,60}
>pple={"kate","alice","john","peter"}
>
>ie: to keep every person opposite his age number.
>thanks
>
>
In[7]:= {sage, spple} =
With[{ordage = Ordering[age]}, {age[[ordage]], pple[[ordage]]}]
Out[7]=
{{12, 20, 30, 60}, {"kate", "alice", "john", "peter"}}
--
Hartmut Wolf
| |
|
|
On Apr 21, 2005, at 5:36 AM, konstantpi@mail15.com wrote:
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
In[7]:=
Transpose[Sort[Thread[
{age, pple}]]]
Out[7]=
{{12, 20, 30, 60},
{"kate", "alice", "john",
"peter"}}
János
----------------------------------------------
Trying to argue with a politician is like lifting up the head of a
corpse.
(S. Lem: His Master Voice)
| |
| Carl K. Woll 2005-04-22, 9:00 am |
| <konstantpi@mail15.com> wrote in message news:d47suf$54n$1@smc.vnet.net...
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>
Use Ordering.
ord=Ordering[age];
age=age[[ord]]
pple=pple[[ord]]
will do what you want.
Carl Woll
| |
| Andrzej Kozlowski 2005-04-22, 9:00 am |
|
On 21 Apr 2005, at 18:36, konstantpi@mail15.com wrote:
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>
Transpose[Sort[Transpose[{age, pple}]]]
{{12, 20, 30, 60}, {"kate", "alice", "john", "peter"}}
Andrzej Kozlowski
Chiba, Japan
http://www.akikoz.net/andrzej/index.html
http://www.mimuw.edu.pl/~akoz/
| |
| Tomas Garza 2005-04-22, 9:00 am |
| Is this what you want?
In[3]:=
{age,pple}=Transpose[Sort[Transpose[{age
,pple}]]]
Out[3]=
{{12,20,30,60},{kate,alice,john,peter}}
In[4]:=
age
Out[4]=
{12,20,30,60}
In[5]:=
pple
Out[5]=
{kate,alice,john,peter}
Tomas Garza
Mexico City
----- Original Message -----
From: <konstantpi@mail15.com>
Subject: Sort problem
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>
>
| |
|
| age={30,12,60,20};
pple={"john","kate","peter","alice"};
{age,pple}=Transpose@Sort@Transpose@{age
,pple}
{{12,20,30,60},{kate,alice,john,peter}}
Bobby
On Thu, 21 Apr 2005 05:36:11 -0400 (EDT), <konstantpi@mail15.com> wrote:
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>
>
>
>
--
DrBob@bigfoot.com
| |
| Harald Giese 2005-04-22, 9:00 am |
| konstantpi@mail15.com wrote:
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
> ie: to keep every person opposite his age number.
> thanks
>
Hi Konstantin,
try "Ordering":
ord=Ordering[age]
{2,4,1,3}
age[[ord]]
(* same as: Sort[age] *)
{12,20,30,60}
(* but can be used to re-order "pple" *)
pple[[ord]]
{kate,alice,john,peter}
HTH
Harald
from Hamburg@Germany
| |
| Bill Rowe 2005-04-22, 9:00 am |
| On 4/21/05 at 5:36 AM, konstantpi@mail15.com wrote:
>Hi How to sort two lists such as: age={30,12,60,20};
>pple={"john","kate","peter","alice"};
>to give the output: age={12,20,30,60}
>pple={"kate","alice","john","peter"}
>ie: to keep every person opposite his age number. thanks
use Sort and Ordering as follows:
In[1]:=
age = {30, 12, 60, 20};
pple = {"john", "kate", "peter", "alice"};
In[3]:=
Sort[age]
pple[[Ordering[age]]]
Out[3]={12, 20, 30, 60}
Out[4]={"kate", "alice", "john", "peter"}
--
To reply via email subtract one hundred and four
| |
| Detlef Müller 2005-04-22, 9:01 am |
| konstantpi@mail15.com wrote:
> Hi
> How to sort two lists such as:
> age={30,12,60,20};
> pple={"john","kate","peter","alice"};
>
> to give the output:
> age={12,20,30,60}
> pple={"kate","alice","john","peter"}
>
A case for "Transpose":
Transpose[Sort[Transpose[{age,pple}]]]
In[1]:=
age={30,12,60,20};
pple={"john","kate","peter","alice"};
In[7]:=
Transpose[{age,pple}]
Out[7]=
{{30,john},{12,kate},{60,peter},{20,alic
e}}
Transpose[Sort[Transpose[{age,pple}]]]
Out[6]=
{{12,20,30,60},{kate,alice,john,peter}}
In[13]:=
Transpose[Sort[Transpose[{age,pple}]]][[
2]]
Out[13]=
{kate,alice,john,peter}
> ie: to keep every person opposite his age number.
> thanks
>
Greetings,
Detlef
|
|
|
|
|