簡體   English   中英

我如何在 Python 中只允許列表最大數量的項目

[英]How do I only allow a list a maximum number of items in Python

我想為列表應用最大數量的項目,確保代碼不允許附加到列表的函數添加超過 3 個項目。

附加到列表的函數:

    transactions = []

    def append_hash():
        transactions.append(hash)

我如何不允許append_hash向列表中添加三個以上的哈希值: transactions而不刪除任何先前的哈希值?

根據定義, 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)

您可以將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

如果你控制你的代碼並確保你只使用你的函數:

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 答案

添加第四個散列將無聲地失敗 - 如果您想引發異常,則可以調整第二個解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM