在Python中查找常见数字



我有两个列表

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.

现在我需要找到来自a的数字是否与来自b的数字相交。

我可以通过从ab中列出一个数字列表,然后将这两个列表相交来完成这项工作,但我正在寻找一些更Python的解决方案。

有什么更好的解决方案吗。

我的o/p应该是4,5,6,7,8,9

这是使用相交的两个列表:

c = list(set(range(a[0],a[1]+1)) & set(range(b[0],b[1]+1)))
>>> print c
[4,5,6,7,8,9]

这是使用minmax:

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

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]
最有效的方法是使用集合:
result = set(a).intersection(b)

当然,你可以使用生成器(一种应用逻辑的Python方式)
result = (x for x in a if x in b)

您需要获得[]None或sth,如果集合inersect。像这样的东西将是最有效的:

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

最新更新