> 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 -- http://mail.python.org/mailman/listinfo/python-list