Praful Bagai
Praful Bagai

Reputation: 17372

Find common numbers in Python

I've 2 list

a = [1,9] # signifies the start point and end point, ie numbers 1,2,3,4,5,6,7,8,9
b = [4,23] # same for this.

Now I need to find whether the numbers from a intersect with numbers from b.

I can do it via making a list of numbers from a and b,and then intersecting the 2 lists, but I'm looking for some more pythonic solution.

Is there anything better solution.

My o/p should be 4,5,6,7,8,9

Upvotes: 1

Views: 281

Answers (3)

Sventimir
Sventimir

Reputation: 2056

You need to get [] or None or sth if sets do not inersect. Something like this would be most efficient:

def intersect(l1, l2):
    bg = max(l1[0], l2[0])
    end = max(l1[1], l2[1])
    return [bg, end] if bg < end else []

Upvotes: 2

Michael Angelos Simos
Michael Angelos Simos

Reputation: 389

a = [1, 2, 3, 4, 5, 6, 7, 8, 9] b = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
The most efficient way is using sets:
result = set(a).intersection(b)

Of course you can use a generator (a pythonic way of applying your logic)
result = (x for x in a if x in b)

Upvotes: 4

sshashank124
sshashank124

Reputation: 32189

This is using intersecting two lists:

c = list(set(range(a[0],a[1]+1)) & set(range(b[0],b[1]+1)))

>>> print c
[4,5,6,7,8,9]

This is using min and max:

>>> c = range(max([a[0],b[0]]), min([a[1],b[1]])+1)

Upvotes: 5

Related Questions