Skip to content

Instantly share code, notes, and snippets.

@codetalks-new
Created September 5, 2013 12:04
Show Gist options
  • Save codetalks-new/6449245 to your computer and use it in GitHub Desktop.
Save codetalks-new/6449245 to your computer and use it in GitHub Desktop.
Python中Set集合操作中的实现相减操作的demo
#-*- coding:utf-8 -*-
class Address(object):
def __init__(self, name):
self.name = name
def __eq__(self, other):
return self.name == other.name
def __ne__(self, other):
return not self.__eq__(other)
def __hash__(self):
return hash(self.name)
class Person(object):
def __init__(self, no, name, sex, addrs):
self.no = no
self.name = name
self.sex = sex
self.addrs = addrs
def __repr__(self):
return self.no
def __eq__(self, other):
print("call __eq__")
if self.name == other.name and self.sex == other.sex:
if self.addrs is None and other.addrs is None:
return True
if not ( self.addrs and other.addrs):
return False
saddrs = sorted(self.addrs, key=lambda addr: addr.name)
oaddrs = sorted(other.addrs, key=lambda addr: addr.name)
eq = saddrs == oaddrs
return eq
return False
def __ne__(self, other):
return not self.__eq__(other)
def __hash__(self):
return hash((self.name,self.sex))
if __name__ == '__main__':
addrs = [Address("a"), Address("b"), Address("c")]
addrs2 = [Address("a"), Address("c"), Address("b")]
p1 = Person("p1", "p", 2, addrs)
p2 = Person("p2", "p", 2, addrs2)
p3 = Person("p3", "p", 1, addrs)
p4 = Person("p4", "p", 2, addrs2)
p5 = Person("p5", "p", 2, addrs)
set_one = {p1, p3, p4}
set_two = {p2, p3, p5}
new_set = set_two - set_one ## 期待得到空的集合
print("element in new_set")
for each in new_set:
print str(each)
else:
print("iter finish")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment