Created
September 5, 2013 12:04
-
-
Save codetalks-new/6449245 to your computer and use it in GitHub Desktop.
Python中Set集合操作中的实现相减操作的demo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#-*- 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