removing common elemets in a list

Discussion in 'Python' started by saif.shakeel@gmail.com, May 16, 2007.

1. Guest

Hi,
Suppose i have a list v which collects some numbers,how do i
remove the common elements from it ,without using the set() opeartor.
Thanks

, May 16, 2007

2. Tim GoldenGuest

wrote:
> Hi,
> Suppose i have a list v which collects some numbers,how do i
> remove the common elements from it ,without using the set() opeartor.

Is this a test? Why don't you want to use the set operator?
Anyway, you can just move things from one list into another
excluding those which are already moved:

<code>
numbers = [1, 2, 3, 3, 4, 4, 5]
unique_numbers = []
for n in numbers:
if n not in unique_numbers:
unique_numbers.append (n)

print unique_numbers
</code>

It won't be the fastest thing you could do, but it
does work. Using a dictionary would speed things up,
but then you're basically implementing a set using
a dictionary.

TJG

Tim Golden, May 16, 2007

3. Gary HerronGuest

wrote:
> Hi,
> Suppose i have a list v which collects some numbers,how do i
> remove the common elements from it ,without using the set() opeartor.
> Thanks
>
>

Several ways, but probably not as efficient as using a set. (And why
don't you want to use a set, one wonders???)

>>> l = [1,2,3,1,2,1]

Using a set:

>>> set(l)

set([1, 2, 3])

Building the list element by element:

>>> for e in l:

.... if e not in r:
.... r.append(e)
....
>>> print r

[1, 2, 3]

Using a dictionary:

>>> d = dict(zip(l,l))
>>> d

{1: 1, 2: 2, 3: 3}
>>> d.keys()

[1, 2, 3]
>>>

Gary Herron, May 16, 2007
4. Carsten HaeseGuest

On Tue, 2007-05-15 at 23:17 -0700, wrote:
> Hi,
> Suppose i have a list v which collects some numbers,how do i
> remove the common elements from it ,without using the set() opeartor.
> Thanks

If the list is sorted, you can weed out the duplicates with
itertools.groupby:

>>> import itertools
>>> L = [1,2,3,3,4,4,5]
>>> [k for (k,_) in itertools.groupby(L, lambda x:x)]

[1, 2, 3, 4, 5]

HTH,

--
Carsten Haese
http://informixdb.sourceforge.net

Carsten Haese, May 16, 2007
5. John ZengerGuest

On May 16, 2:17 am, wrote:
> Hi,
> Suppose i have a list v which collects some numbers,how do i
> remove the common elements from it ,without using the set() opeartor.
> Thanks

import base64
def uniq(v):
return
eval(base64.b64decode('c29ydGVkKGxpc3Qoc2V0KHYpKSxrZXk9bGFtYmRhIHg6di5pbmRleCh4KSk='),locals())

John Zenger, May 16, 2007
6. Michael BentleyGuest

On May 16, 2007, at 10:36 AM, John Zenger wrote:

> On May 16, 2:17 am, wrote:
>> Hi,
>> Suppose i have a list v which collects some numbers,how do i
>> remove the common elements from it ,without using the set() opeartor.
>> Thanks

>
>
> import base64
> def uniq(v):
> return
> eval(base64.b64decode
> ('c29ydGVkKGxpc3Qoc2V0KHYpKSxrZXk9bGFtYmRhIHg6di5pbmRleCh4KSk='),local
> s())

Nice! But I think he said he couldn't use set() ;-)

Michael Bentley, May 16, 2007
7. janislawGuest

On May 16, 8:17 am, wrote:
> Hi,
> Suppose i have a list v which collects some numbers,how do i
> remove the common elements from it ,without using the set() opeartor.
> Thanks