我有两个列表
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
的数字相交。
我可以通过从a
和b
中列出一个数字列表,然后将这两个列表相交来完成这项工作,但我正在寻找一些更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]
这是使用min
和max
:
>>> 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 []