2009-12-18 64 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方式就是做一個列表。