2009-12-18 31 views
0

我正在定义一个仅使用一组整数的类。Python:定义一个只有整数定义的类

不能使用以下数据类型定义我的类:set, frozenset and dictionaries

我需要帮助限定:

remove(self,i):整数i从集合中删除。如果我不在自我身上,会引发异常。

discard(self, i):整数i从集合中移除。如果我不在自我中,则不会引发异常

+2

请告诉我们您到目前为止写的代码。 – 2009-12-18 21:57:39

+0

这是非常不明确的。如果您向我们展示您尝试过的内容并询问更具体的问题,那么您会有更好的运气。这感觉就像试图让人们为你做你的功课。 – 2009-12-18 21:58:15

+0

它不是家庭作业,它是一本书的练习,但书不附带答案。 – Lisa 2009-12-18 21:59:26

回答

1

我无法在定义我的类时使用以下数据类型:set,frozenset和dictionaries。

它看起来像你要使用列表。 您可以使用列表的remove方法并以适当的方式处理异常。

2

假设你正在使用基于你所说的内部列表,你可以做到这一点,像这样:

class Example(object): 
    def __init__(self): 
     self._list = list() 

    # all your other methods here... 

    def remove(self, i): 
     try: 
      self._list.remove(i) 
     except ValueError: 
      raise ValueError("i is not in the set.") 

    def discard(self, i): 
     try: 
      self._list.remove(i) 
     except ValueError: 
      pass 

remove()尝试删除元素和捕捉列表的ValueError异常,因此它可以抛出自己的。 discard()也会做同样的事情,但如果发生ValueError,则不会执行任何操作。

1

这里的效率非常低,但使用完整实现MutableSet ABC

import collections 


class MySet(collections.MutableSet): 

    def __init__(self, iterable=tuple()): 
     self._items = [] 
     for value in iterable: 
      self.add(value) 

    def discard(self, value): 
     try: self._items.remove(value) 
     except ValueError: 
      pass 

    def add(self, value): 
     if value not in self: 
      self._items.append(value) 

    def __iter__(self): 
     return iter(self._items) 

    def __len__(self): 
     return len(self._items) 

    def __contains__(self, value): 
     return value in self._items 

collections.MutableSet来源:

def remove(self, value): 
    if value not in self: 
     raise KeyError(value) 
    self.discard(value) 
0

这里是我与重复做,采取一些想法从中

combList = list1 + list2 

combList.sort() 
last = combList[-1] 
for i in range(len(combList)-2, -1, -1): 
     if last == combList[i]: 
       del combList[i] 
     else: 
       last = combList[i] 

combList.sort() 

for i in range(len(combList)): 
     print i+1, combList[i] 

我完全同意唯一的LiOliQ方式就是做一个列表。