Skip to content Skip to sidebar Skip to footer

How To Find A Missing Number From A List?

How do I find the missing number from a sorted list the pythonic way? a=[1,2,3,4,5,7,8,9,10] I have come across this post but is there a more and efficient way to do this?

Solution 1:

>>>a=[1,2,3,4,5,7,8,9,10]>>>sum(xrange(a[0],a[-1]+1)) - sum(a)
6

alternatively (using the sum of AP series formula)

>>> a[-1]*(a[-1] + a[0]) / 2 - sum(a)
6

For generic cases when multiple numbers may be missing, you can formulate an O(n) approach.

>>>a=[1,2,3,4,7,8,10]>>>from itertools import imap, chain>>>from operator import sub>>>printlist(chain.from_iterable((a[i] + d for d in xrange(1, diff))
                        for i, diff in enumerate(imap(sub, a[1:], a))
                        if diff > 1))
[5, 6, 9]

Solution 2:

This should work:

a = [1, 3, 4, 5, 7, 8, 9, 10]
b = [x for x inrange(a[0], a[-1] + 1)]
a = set(a)
print(list(a ^ set(b)))
>>> [2, 6]

Solution 3:

1 + 2 + 3 + ... + (n - 1) + n = (n) * (n + 1)/2

so the missing number is:

(a[-1] * (a[-1] + 1))/2 - sum(a)

Solution 4:

set(range(a[len(a)-1])[1:]) - set(a)

Take the set of all numbers minus the set of given.

Solution 5:

And another itertools way:

from itertools import count, izip

a=[1,2,3,4,5,7,8,9,10]
nums = (b for a, b in izip(a, count(a[0])) if a != b)
next(nums, None)
# 6

Post a Comment for "How To Find A Missing Number From A List?"