在python中,如果有兩個(gè)數(shù)組昙沦,分別要求交集琢唾,并集與差集,怎么實(shí)現(xiàn)比較方便呢盾饮?
當(dāng)然最容易想到的是對兩個(gè)數(shù)組做循環(huán)采桃,即寫兩個(gè)for循環(huán)來實(shí)現(xiàn)。這種寫法大部分同學(xué)應(yīng)該都會(huì)丘损,而且也沒有太多的技術(shù)含量普办,下面介紹一些常用的方法。
# -*- 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)
結(jié)果如下圖:
image.png
結(jié)合代碼來看徘钥,大體上是兩種思路:
1.使用列表解析式衔蹲。列表解析式一般來說比循環(huán)更快。
2.將list轉(zhuǎn)成set以后呈础,使用set的各種方法去處理舆驶。