<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2653.12">
<TITLE>FW: fast sub list operations</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>-----Original Message-----</FONT>
<BR><FONT SIZE=2>From: Robin Becker [<A HREF="mailto:robin@jessikat.fsnet.co.uk">mailto:robin@jessikat.fsnet.co.uk</A>] </FONT>
<BR><FONT SIZE=2>Sent: Tuesday, October 16, 2001 8:34 AM</FONT>
<BR><FONT SIZE=2>To: python-list@python.org</FONT>
<BR><FONT SIZE=2>Subject: fast sub list operations</FONT>
</P>
<BR>

<P><FONT SIZE=2>I constantly miss some nice way to subset lists. As an example suppose I</FONT>
<BR><FONT SIZE=2>have a list of x y coordinates eg</FONT>
</P>

<P><FONT SIZE=2>        [x0,y0,x1,y1,.....]</FONT>
</P>

<P><FONT SIZE=2>and wish to perform the operation x->x+v, y->y+w for the co-ordinates in</FONT>
<BR><FONT SIZE=2>the list I don't seem to be able to do this fast using map. Even if I</FONT>
<BR><FONT SIZE=2>had a way to slice the list nicely into</FONT>
</P>

<P><FONT SIZE=2>X=[x0,x1,.....x(n-1)] & Y=[y0,y1,.....,y(n-1)]</FONT>
</P>

<P><FONT SIZE=2>so that I can do map(operator.add,X,n*[v]) to perform the arithmetic</FONT>
<BR><FONT SIZE=2>quickly I don't seem to have an interlace to get back to the original</FONT>
<BR><FONT SIZE=2>list format.</FONT>
</P>

<P><FONT SIZE=2>How can these kinds of operations be performed quickly in current python</FONT>
<BR><FONT SIZE=2>and what if any new features would python require to do them best?</FONT>
<BR><FONT SIZE=2>-- </FONT>
<BR><FONT SIZE=2>Robin Becker</FONT>
<BR><FONT SIZE=2>-- </FONT>
<BR><FONT SIZE=2><A HREF="http://mail.python.org/mailman/listinfo/python-list" TARGET="_blank">http://mail.python.org/mailman/listinfo/python-list</A></FONT>
<BR><FONT SIZE=2>**************************************************************************************************************************************************************************************************</FONT></P>

<P><FONT SIZE=2>What do you think of this?</FONT>
</P>

<P><FONT SIZE=2>1 - Define the list of coordenates like this</FONT>
</P>

<P><FONT SIZE=2>X=[(x1,y1),(x2,y2),...,(xn,yn)]</FONT>
</P>

<P><FONT SIZE=2>and operator like this</FONT>
</P>

<P><FONT SIZE=2>oper=[(v,w)]</FONT>
</P>

<P><FONT SIZE=2>2 - Then, define a function </FONT>
</P>

<P><FONT SIZE=2>def add_list_tuples(lista,listb):</FONT>
<BR>        <FONT SIZE=2>import operator</FONT>
<BR>        <FONT SIZE=2>result=[]</FONT>
<BR>        <FONT SIZE=2>for i in range(len(a)):</FONT>
<BR>                <FONT SIZE=2>p=operator.add(a[i][0],b[i][0])</FONT>
<BR>                <FONT SIZE=2>q=operator.add(a[i][1],b[i][1])</FONT>
<BR>                <FONT SIZE=2>result.append(tuple((p,q)))</FONT>
<BR>        <FONT SIZE=2>return result</FONT>
</P>

<P><FONT SIZE=2>3 - Then, all you need to do is to apply</FONT>
</P>

<P><FONT SIZE=2>map(add_list_tuples,X,n*oper)</FONT>
</P>

<P><FONT SIZE=2>to get what you want</FONT>
</P>

</BODY>
</HTML>