在python中,如果有两个数组,分别要求交集,并集与差集,怎么实现比较方便呢?
当然最容易想到的是对两个数组做循环,即写两个for循环来实现。这种写法大部分同学应该都会,而且也没有太多的技术含量,下面介绍一些常用的方法。
# -*- encoding:utf-8 -*-
def diff(listA, listB):
# 交集方法1
retA = [i for i in listA if i in listB]
# 交集方法2
retB = list(set(listA).intersection(set(listB)))
print '---------交集--------'
print 'retA:%s' % retA
print 'retB%s' % retB
# 并集
retC = list(set(listA).union(set(listB)))
print '---------并集--------'
print 'retC:%s' % retC
# 差集 方法1 在B中不在A中
retD = list(set(listB).difference(set(listA)))
print '---------差集方法1--------'
print 'retD:%s' % retD
# 差集 方法2 在B中不在A中
retE = [i for i in listB if i not in listA]
print '---------差集方法2-----'
print 'retE:%s' % retE
if __name__ == '__main__':
listA = [1, 2, 3, 4, 5]
listB = [3, 4, 5, 6, 7]
diff(listA, listB)
结果如下图:
结合代码来看,大体上是两种思路:
1.使用列表解析式。列表解析式一般来说比循环更快。
2.将list转成set以后,使用set的各种方法去处理。