包含只允许一个持有列表中的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]
所以我能做些什么
包含只允许一个持有列表中的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]
所以我能做些什么
你总是可以创建自己的类,它需要什么: 编辑:
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页面
我在代码中添加了一些东西,使它更像你想要的 – P2bM 2011-04-07 03:59:39
你需要覆盖'__iadd__',而不是'__add__'来使用'+ = '用一个自定义对象。 – 2011-04-07 04:50:50
实际上在这种情况下'__add__'比'__iadd__'实现更重要,这是因为在缺少__iadd__'的情况下,调用方法'__add__',而通过'__add__'更多的方式可以添加两个对象并将它们分配给另一个,而__iadd__'不能。这就是为什么我在这里使用'__add__'而不是'__iadd__' – P2bM 2011-04-07 05:54:16
您需要子类列表,并修改__ iadd__(至少)。但我还没有弄清楚如何。敬请期待......
好的,P2bM打败了我,我正在吃晚餐:^) – 2011-04-07 04:00:47
你能对你正在尝试做的详细点吗? – GWW 2011-04-07 02:42:40
'>>> a = [0,1]; a + = [1];打印一个''>>> [0,1,1]'其中大多数不正确。你在问什么? – 2011-04-07 02:47:39
还要注意,OP需要setlike行为,如第二个和第四个示例所示。 – PaulMcG 2011-04-07 08:53:16