duplicate items in a list

Steven D'Aprano steve at REMOVETHIScyber.com.au
Mon Nov 21 07:21:23 EST 2005


On Mon, 21 Nov 2005 02:49:56 -0800, Shi Mu wrote:

> I used the following method to remove duplicate items in a list and
> got confused by the error.
> 
>>>> a
> [[1, 2], [1, 2], [2, 3]]
>>>> noDups=[ u for u in a if u not in locals()['_[1]'] ]
> Traceback (most recent call last):
>   File "<interactive input>", line 1, in ?
> TypeError: iterable argument required

Confused by the error? I'm confused by your code!!!

If you want to remove duplicate items in a list, try something like this:


def remove_dups(L):
    """Removes duplicate items from list L in place."""
    # Work backwards from the end of the list.
    for i in range(len(L)-1, -1, -1):
        # Check to see if the current item exists elsewhere in 
        # the list, and if it does, delete it.
        if L[i] in L[:i]:
            del L[i]

Instead of deleting duplicate items in place, we can create a new list
containing just the unique items:

def unique_items(L):
    """Returns a new list containing the unique items from L."""
    U = []
    for item in L:
        if item not in U:
            U.append(item)
    return U


The trick you are trying to do with _ is undocumented and, even if you get
it to work *now*, is probably not going to work in the future. Don't do it.


-- 
Steven.




More information about the Python-list mailing list