在类中使用集合;从集合中添加和删除元素
好的,我现在有两个驱动文件,我需要创建一个类来让这些驱动文件能够工作。以下是说明:
你创建的类必须叫做
Set
。每个Set
类的对象应该包含一个列表,里面存放所有的元素(实例数据)。这个列表应该叫做members
(在类里面,你必须使用一个名为self.members
的 Python 列表——不要使用 Python 的Set
类,要自己实现一个)。对于这个作业,你需要包含以下方法:
__init__()
这个构造函数是一个默认构造函数,不接受任何参数。它会用一个空列表来初始化这个列表(实例数据)。add_element(integer)
这个方法会向集合中添加一个整数。你可以假设只会传入一个整数。对于这个作业,不需要验证传入的参数是否是整数。remove_element(integer)
这个方法会从集合中移除传入的值。remove_all()
这个方法会移除列表中的所有值,使其变为空。has_element(x)
这个方法接受一个整数,如果它是调用对象的成员,则返回True
,否则返回False
。__repr__()
这个方法允许使用 Python 的print()
函数打印Set
,通过返回一个字符串。集合应该用常规的集合表示法打印:{元素1, 元素2, … 元素n},当有 n 个元素时。如果集合为空,则打印{}
。__str__()
这个方法允许Set
与 Python 的str()
函数一起使用。它返回的字符串与__repr__()
方法返回的字符串是一样的。__add__
这个方法重载了+
操作符,为我们的Set
类提供了并集功能。这个方法返回一个新的Set
,包含两个被加的集合的所有成员。intersect(x)
这个方法返回一个Set
对象,包含在调用的Set
和传入的Set
x
中都存在的元素。has_subset(x)
这个方法与上周的is_element()
类似,但不完全相同。参数应该是另一个Set
,而不是一个整数。如果传入的Set
是调用的Set
的子集,则返回True
,否则返回False
。第一部分:
编写这个类,包含一个默认构造函数(不传入参数),
addElement
、removeElement
和removeAll
函数。
我现在很困惑,不知道该怎么设置这个!如果我能在第一部分得到帮助,我觉得我可以完成其他三部分。以下是我目前的进展……但我知道这完全搞错了!这个“集合”让我很困扰。我不知道该怎么添加或移除任何东西。
class Set:
def __init__(self):
self.members = []
set = {}
def add_element(self):
return self.add()
def remove_element(self):
return self.remove()
def get_remove_all(self):
self.remove_all()
3 个回答
0
这个作业的目的是让你练习列表操作。虽然Set类有点儿奇怪,但这并不重要,关键是让你多练习列表。你可以对列表做一些事情,比如用 x in mylist
来检查某个元素是否在列表里,使用 del mylist[x]
来删除列表中指定位置的元素,或者用 mylist.append(x)
来往列表里添加新元素,还有 [x for x in mylist if x in otherlist]
这种写法可以用来从一个列表中筛选出在另一个列表里的元素。所以,开始把这些操作应用到Set类上吧:
class Set(object): # python 2.x, in 3.x you can just say class Set:
def __init__(self):
self.member = []
def add_element(self, integer):
if integer not in self.member:
self.member.append(integer)
...
0
我不想给你一个完整的解决方案,因为这个作业我想你自己来解决...
这个作业要求你创建一个类,而不是函数。所以你可以这样开始:
class Set(object):
def __init__(self):
self.members = []
def add_element(self, some_integer):
if not some_integer in self.members:
self.members.append(some_integer)
def get_remove_all(self):
self.members = []
...
0
我故意实现了一个错误的解决方案,但你应该把这个当作一个更好的方法来呈现给你的老师,来应对这个荒谬的作业。我的意思是,拜托,你的老师连方法的命名都不一致。
class Set(object):
def __init__(self):
self.members = {}
def addElement(self, member):
self.members[member] = None
def removeElement(self, member):
if member in self.members:
del self.members[member]
else:
raise ValueError('Item not in the set.')
def removeAll(self):
self.members = {}