我想为列表应用最大数量的项目,请确保该代码不允许附加到列表的函数添加超过3个项目。
追加到列表的功能:
transactions = []
def append_hash():
transactions.append(hash)
如何不允许append_hash
在列表中添加三个以上的哈希:transactions
而又不删除任何以前的哈希?
答案 0 :(得分:2)
根据定义,list
具有任意大小。您将需要一种新类型。
class BoundedListFullError(RuntimeError):
pass
class BoundedList:
def __init__(self, max_size, x=None):
if x is None:
x = []
self.values = []
self.values.extend(x)
self.max_size = max_size
def append(self, x):
if len(self.values) == self.max_size:
raise BoundedListFullError(self.max_size)
self.values.append(x)
def extend(self, xs):
if len(self.values) + len(xs) > self.max_size:
raise BoundedListFullError(self.max_size)
self.values.extend(xs)
答案 1 :(得分:1)
您可以仅继承list
并修改append
方法:
class MyStack(list):
def __init__(self, max_size, *args, **kwargs):
super().__init__(*args, **kwargs)
self.max_size = max_size
def append(self, value):
if len(self) >= self.max_size:
raise ValueError("NO!")
# Per @chepner's suggestion
super().append(value)
somestack = MyStack(3)
somestack.append(1)
somestack.append(2)
somestack.append(3)
somestack.append(4) # Raises ValueError
答案 2 :(得分:0)
如果您控制代码并确保仅使用函数:
transactions = []
def append_hash(h):
transaction = (transactions + [h])[:3]
或
def append_hash(h):
if len(transaction) < 3:
transaction.append(3)
# else:
# raise some error you need to choose/define
尽管这两个都不会强制执行-您仍然可以在没有功能的情况下修改列表。您需要一个单独的类-请参见chepners answer。
添加第四个哈希将无声地失败-如果您想引发异常,则可以采用第二个解决方案。