Charlie Miller
Charlie Miller

Reputation: 41

Common elements between two lists with no duplicates

Problem is this, take two lists, say for example these two:

a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

And write a program that returns a list that contains only the elements that are common between the lists (without duplicates). Make sure your program works on two lists of different sizes.

Here's my code:

a = [1, 1, 2, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
c = []
for i in a:
    if i in b and i not in c:
        c.append([i])
print(c)

My output is still giving me duplicates despite the 'i not in c' statement. why is this? I'm sure its blatantly obvious, I just cant see it!

Upvotes: 3

Views: 29461

Answers (7)

Mahin_Vasava
Mahin_Vasava

Reputation: 1

a = set(a)
b = set(b)
c = a. intersection(b)
c = list(c)
print(c)

Upvotes: 0

Raj Patel
Raj Patel

Reputation: 1

Initialize list a, b and result

a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

b = [1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

result = []

Append list result using list comprehension

[(result.append(i)) for i in a if i in b and i not in result]

print(result)   # [1, 2, 3, 5, 8, 13]

Upvotes: 0

Bee
Bee

Reputation: 31

using list comprehensions, l think it had be short and simple if it was implemented as following

a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
[i for i in a and b if i in a and b]

result:

[1, 2, 3, 5, 8, 13]

Upvotes: 3

Deepu
Deepu

Reputation: 1

c = []
for items in a:
    for numbers in b:
        if items == numbers:
            if items in c:
                None
            else:
                c.append(items)
print(c)

Upvotes: 0

Govinda Malavipathirana
Govinda Malavipathirana

Reputation: 1141

Using intuition of sets, You could do something like this...

filtered_arr = list(set(b)-set(a))

First you convert 2 arrays into sets, then take the substitute of it convert the result into the list again.

Upvotes: 0

user11682211
user11682211

Reputation: 3

The below code would work:

newlist = []
for x in b:
    if x in a:
        if x in newlist:
            print("duplicate")
        else:
            newlist.append(x)

for y in newlist:
    print(y)   

Upvotes: 0

DeepSpace
DeepSpace

Reputation: 81594

  1. You are appending a list containing i to c, so i not in c will always return True. You should append i on its own: c.append(i)

Or

  1. Simply use sets (if order is not important):

    a = [1, 1, 2, 2, 3, 5, 8, 13, 21, 34, 55, 89]
    b = [1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
    c = set(a) & set(b)  #  & calculates the intersection.
    print(c)
    #  {1, 2, 3, 5, 8, 13}
    

EDIT As @Ev. Kounis suggested in the comment, you will gain some speed by using
c = set(a).intersection(b).

Upvotes: 15

Related Questions