如何从列表中找到缺失的号码?

新手上路,请多包涵

如何以 pythonic 方式从排序列表中找到缺失的数字?

 a=[1,2,3,4,5,7,8,9,10]

我遇到过这篇 文章,但是有没有更有效的方法来做到这一点?

原文由 Rajeev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 314
2 个回答
>>> a=[1,2,3,4,5,7,8,9,10]
>>> sum(xrange(a[0],a[-1]+1)) - sum(a)
6

或者(使用 AP 系列公式的总和)

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

对于可能缺少多个数字的一般情况,您可以制定 O(n) 方法。

 >>> a=[1,2,3,4,7,8,10]
>>> from itertools import imap, chain
>>> from operator import sub
>>> print list(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]

原文由 Abhijit 发布,翻译遵循 CC BY-SA 3.0 许可协议

这应该有效:

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

原文由 Samman Thapa 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题