Need help porting Perl function

Daniel Fetchinson fetchinson at googlemail.com
Sat Jun 7 14:42:17 EDT 2008


> 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



More information about the Python-list mailing list