我有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
中的数字相交。
我可以通过制作a
和b
中的数字列表,然后交叉2个列表来实现,但我正在寻找更多的pythonic解决方案。
有没有更好的解决方案。
我的o / p应为4,5,6,7,8,9
答案 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]
这是使用min
和max
:
>>> 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 []