在Python中查找常用数字

时间:2014-04-14 06:27:20

标签: python

我有2个列表

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中的数字列表,然后交叉2个列表来实现,但我正在寻找更多的pythonic解决方案。

有没有更好的解决方案。

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

3 个答案:

答案 0 :(得分:5)

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

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)

答案 1 :(得分:4)

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)

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

答案 2 :(得分:2)

如果 ,则需要[]None。这样的事情会最有效:

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