题目要求:实现两个列表的交并补差运算
参考高中集合知识可知:
(均以A,B集合为例)
集合特点:无序,互异,确定
交集:两个集合的公共元素组成的集合 记作:A∩B
并集:包含两个集合的所有元素的集合 记作:A∪B
补集:A是B的一个子集,由B中所有不属于A的元素组成的集合,叫做子集A在B中的补集 记作:cBA
差集:(A - B) A中不含B中所有元素的集合
思路:(list1,list2)
1列表交集(intersect):两个列表中所有的公共元素所组成的列表,一一比对即可
2列表并集(union):先求出两个列表的公共部分list3,然后再将list1,list2中不在list3中的元素加入list3
3补集(complementary):首先判断是否能进行运算;然后在判断谁求谁的补集
4差集(dif):dif = complementary ( list1,intersect( list1, list2 ) )
实现代码:
# 写出列表的交,补,并,差集
# 求两个列表的交集 返回一个列表
def intersect(list1, list2):
intersectlist = []
for i in list1:
for j in list2:
if i == j:
intersectlist.append(i)
break
intersectlist.sort()
return intersectlist
# 求两个列表的并集
def union(list1, list2):
list_sect = intersect(list1, list2) # 先求两个列表的交集
list_union = [] # 初始化一个list_union
for num in list_sect:
list_union.append(num) # 将交集中所有元素放入list_union列表
for i in list1:
if i in list_sect:
continue
else:
list_union.append(i)
for i in list2:
if i in list_sect:
continue
else:
list_union.append(i)
list_union.sort()
return list_union
# 求两列表的补集
def complementary(list1, list2):
comple = []
list_intect = intersect(list1, list2) # 取交集
if list_intect != list1 and list_intect != list2: # 交集不等于任何一个集合
return '不存在包含与被包含关系'
elif list_intect == list1: # 交集等于list1
for num in list2:
if num in list_intect:
continue
else:
comple.append(num)
return comple
else:
return complementary(list2, list1)
# 求两个集合的差集A - B = comple(A,intersect(A,B))
def dif(list1, list2):
return complementary(list1, intersect(list1, list2))
listunion = union([1, 2, 3, 4], [2, 3, 4, 5])
listintersect = intersect([1, 2, 3, 4], [2, 3, 4, 5])
listcomple = complementary([1, 2, 3, 4], [1, 2, 3, 4, 5])
list_dif = dif([1, 2, 3, 4, 7], [1, 2, 3, 4, 5])
print(listunion, listintersect, listcomple, list_dif)
!!本文仅供自己参考!!