在类中使用集合;从集合中添加和删除元素

-1 投票
3 回答
1015 浏览
提问于 2025-04-21 08:52

好的,我现在有两个驱动文件,我需要创建一个类来让这些驱动文件能够工作。以下是说明:

你创建的类必须叫做 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

第一部分:

编写这个类,包含一个默认构造函数(不传入参数),addElementremoveElementremoveAll 函数。

我现在很困惑,不知道该怎么设置这个!如果我能在第一部分得到帮助,我觉得我可以完成其他三部分。以下是我目前的进展……但我知道这完全搞错了!这个“集合”让我很困扰。我不知道该怎么添加或移除任何东西。

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 = {}

撰写回答