Re: Extracting some elements, members of another list

• To: mathgroup at smc.vnet.net
• Subject: [mg112429] Re: Extracting some elements, members of another list
• From: Peter Pein <petsie at dordos.net>
• Date: Wed, 15 Sep 2010 04:39:18 -0400 (EDT)
• References: <i6nedc\$g8u\$1@smc.vnet.net>

```Am Tue, 14 Sep 2010 09:14:20 +0000 (UTC)
schrieb Nacho <ncc1701zzz at gmail.com>:

> Hi!
>
>
> I have a list of elements, consisting in phone numbers with some data:
>
> list1= { { phone1, data1}, {phone2, data2}, {phone3, data3} .... }
>
> And a list of phones, a subset of the phone numbers in list1
>
> list2= {phone2, phone3, phone7... }
>
> I'd like to extract the elements from list1 whose phone numbers are
> present in list 2, that is:
>
> result= { { phone2, data2}, {phone3, data3, {phone7, data7} .... }
>
> I've used this with small lists and it works fine:
>
> result = Select[list1, MemberQ[list2, #[[1]]] &];
>
> The problem is that now I would like to use it with big lists. list1
> is over 1.000.000 elements long and list2 is about 500.000 elements
> long.  Ordering is not a problem, I could resort the lists.
>
> Any hint to extract this list faster? It seems to take a lot of time
> (estimation is about 5 hours and I have to do it repeatedly)
>
>
> Thanks!
>

Hi Nacho,

you can convert list1 to a list of rules by

phonedatarules = Dispatch[Rule @@@ list1];

this needs only to be done once and needs ~11 seconds with 10^6
entries in list1 on my laptop.
Then use

thewanteddata=Transpose[{list2,list2/.phonedatarules}];
(~8 seconds with a random list of 464696 entries)

and you'll get sth. like
Take[thewanteddata,5]//InputForm
-->
{
{Subscript[phone, 764884], Subscript[data, 764884]},
{Subscript[phone, 127257], Subscript[data, 127257]},
{Subscript[phone, 113745], Subscript[data, 113745]},
{Subscript[phone, 279308], Subscript[data, 279308]},
{Subscript[phone, 478296], Subscript[data, 478296]}
}

Regards,
Peter

```

• Prev by Date: Re: Extracting some elements, members of another list
• Next by Date: Re: Extracting some elements, members of another list
• Previous by thread: Re: Extracting some elements, members of another list
• Next by thread: Re: Extracting some elements, members of another list