On Jun 7, 2:42 pm, "Daniel Fetchinson" <[EMAIL PROTECTED]> wrote: > > Hi. I'd like to port a Perl function that does something I don't > > know how to do in Python. (In fact, it may even be something that > > is distinctly un-Pythonic!) > > > The original Perl function takes a reference to an array, removes > > from this array all the elements that satisfy a particular criterion, > > and returns the list consisting of the removed elements. Hence > > this function returns a value *and* has a major side effect, namely > > the target array of the original argument will be modified (this > > is the part I suspect may be un-Pythonic). > > > Can a Python function achieve the same effect? If not, how would > > one code a similar functionality in Python? Basically the problem > > is to split one list into two according to some criterion. > > This function will take a list of integers and modify it in place such > that it removes even integers. The removed integers are returned as a > new list (disclaimer: I'm 100% sure it can be done better, more > optimized, etc, etc): > > def mod( alist ): > old = alist[:] > ret = [ ] > for i in old: > if i % 2 == 0: > ret.append( alist.pop( alist.index( i ) ) ) > > return ret > > x = range(10,20) > > print x > r = mod( x ) > print r > print x > > HTH, > Daniel > -- > Psss, psss, put it down! -http://www.cafepress.com/putitdown
def mod( alist ): return [ alist.pop( alist.index( x ) ) for x in alist if x % 2 == 0 ] alist = range(10,20) blist = mod( alist ) print alist print blist The same thing with list comprehensions. -- http://mail.python.org/mailman/listinfo/python-list