我在 python 中重新实现了该集合,但我在多个交集方面遇到了一些问题....我按照 Learning Python 这本书学习,但我的代码有问题
class Set:
def __init__(self,value=[]):
self.data = []
self.remDupli(value)
def remDupli(self,val):
for i in val:
if i not in self.data:
self.data.append(i)
def intersect(self,other):
val=[]
for i in self.data:
for k in other:
if i == k:
val.append(i)
return Set(val)
def union(self,other):
val=self.data
for i in other:
if i not in self.data:
val.append(i)
return Set(val)
def __or__(self,a): return self.union(a)
def __and__(self,a): return self.intersect(a)
def __len__(self): return len(self.data)
def __getitem__(self,key): return self.data[key]
def __repr__(self): return 'Set: ' +repr(self.data)
class Extend(Set):
def intersect(self, *others):
val = []
for i in self:
for x in others:
if i in x:
val.append(i)
return Set(val)
但是当我运行这个时:
x = Extend([1,2,3,4])
y = Extend([3,4,5])
z = Extend([0,1,2])
print(x & y & z)
print(x.intersect(y, z))
我有两种不同的行为
Set: []
Set: [1, 2, 3, 4]
我不明白,因为第二个是不同的,在我看来他们应该有相同的行为,任何人都可以帮助我吗?
请您参考如下方法:
Extend.intersect不计算许多集合之间的交集。它计算 self 之间的交集和 others 的联盟 .
结果不同因为x & y & z电话 Extend.intersect(Extend.intersect(x,y), z) , 而 x.intersect(y,z)电话 Extend.intersect(x, *[y,z])并给出了Extend.intersect 实际上确实如此,这些恰好是不同的操作。
