2011-04-07 23 views
-4

包含只允許一個持有列表中的0,1,2 0 1 2,如何使用python

a=[0,1,2]#a's max size 

if a=[0,] a += [1] --> [0,1] 
if a=[0,1] a += [1] --> [0,1] 
if a=[0,1] a += [2] --> [0,1,2] 
if a=[0,1,2] a += [1] --> [0,1,2] 
if a=[0,1,2] a += [4] --> [0,1,2] 

所以我能做些什麼

+3

你能對你正在嘗試做的詳細點嗎? – GWW 2011-04-07 02:42:40

+0

'>>> a = [0,1]; a + = [1];打印一個''>>> [0,1,1]'其中大多數不正確。你在問什麼? – 2011-04-07 02:47:39

+0

還要注意,OP需要setlike行爲,如第二個和第四個示例所示。 – PaulMcG 2011-04-07 08:53:16

回答

5

你總是可以創建自己的類,它需要什麼: 編輯:

class LimitedList: 
    def __init__(self, inputList=[]): 
     self._list = [] 
     self.append(inputList) 

    def append(self, inputList): 
     for i in inputList: 
      if i in [0,1,2] and i not in self._list: 
       self._list += [i] 
     return self._list.sort() 

    def set(self, inputList=[]): 
     self.__init__(inputList) 

    def get(self): 
     return self._list 

    def __iter__(self): 
     return (i for i in self._list) 

    def __add__(self, inputList): 
     temp = LimitedList(self._list) 
     for i in inputList: 
      if i in [0,1,2] and i not in temp._list: 
       temp._list += [i] 
     temp._list.sort() 
     return temp 

    def __getitem__(self, key): 
     return self._list[key] 

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




a = LimitedList([2,3,4,5,6,0]) # create a LimitedList 

print a.get() # get the LimitedList 

a += [2,3,4,5,6,6,1] # use the "+" operator to append a list to your limited list 

print len(a) # get the length 

print a[1] # get the element at position 1 

for i in a: # iterate over the LimitedList 
    print i 

我加了一些描述符,你可以直接使用+運營商像你想,並且您還可以遍歷列表並使用in運算符,獲得長度爲len(),並訪問元素,如果需要可以添加更多元素並創建自己的自定義列表類型。

欲瞭解更多信息,你可以檢查Data model頁面

+0

我在代碼中添加了一些東西,使它更像你想要的 – P2bM 2011-04-07 03:59:39

+0

你需要覆蓋'__iadd__',而不是'__add__'來使用'+ = '用一個自定義對象。 – 2011-04-07 04:50:50

+0

實際上在這種情況下'__add__'比'__iadd__'實現更重要,這是因爲在缺少__iadd__'的情況下,調用方法'__add__',而通過'__add__'更多的方式可以添加兩個對象並將它們分配給另一個,而__iadd__'不能。這就是爲什麼我在這裏使用'__add__'而不是'__iadd__' – P2bM 2011-04-07 05:54:16

1

你一定做錯了什麼:

>>> a = [0, 1, 2] 
>>> a += [4] 
>>> a 
[0, 1, 2, 4] 
>>> _ 
+0

a只允許在其中添加0,1,2。沒有4 – zjm1126 2011-04-07 02:45:34

+1

那你爲什麼要加4呢?你是說你想*防止*添加0,1和2以外的數字嗎? – 2011-04-07 02:46:07

+0

如何創建一個這樣的。 – zjm1126 2011-04-07 02:51:06

0

您需要子類列表,並修改__ iadd__(至少)。但我還沒有弄清楚如何。敬請期待......

+0

好的,P2bM打敗了我,我正在吃晚餐:^) – 2011-04-07 04:00:47