无限分配到列表? [关闭]

问题描述 投票:-1回答:1

我是Python语言的新手,我问这个问题是否可以创建每个位置具有相同值的列表(可能是无限的)。例如,我想创建一个在每个位置都有False的列表,例如:

list = []
for i in range(400):
   list.append(False)

我希望有一种方法可以不设置“上限”(示例中为400),并且每次访问列表位置(n + 1)时总是返回False并且不会超出范围。谢谢您的帮助!

python list infinite
1个回答
1
投票

你可以使用自己的类。

class DefaultList(list):
    """ A list with default values
    """

    def __init__(self, iterable: typing.Iterable = None, default=lambda: None):
        """
        :param iterable: initial data
        :param default: Default function for values
        """
        super().__init__(iterable or list())
        self._default = default

    def __getitem__(self, index):
        if index >= len(self):
            return self._default()
        else:
            return super().__getitem__(index)

    def __setitem__(self, index, object_):
        if index >= len(self):  # -- expand list if necessary.
            self.extend(self._default() for _ in range(index - len(self) + 1))
        super().__setitem__(index, object_)

如果您写入高于列表当前大小的位置,列表将会扩展。如果您只是尝试从较高位置读取,则不需要扩展名,您将获得默认值。

以下代码显示了可能的用法:

d = DefaultList()
print(d)
# -> []
print(d[4])
# -> None
print(d)
# -> []
d[8] = 23
print(d)
# -> [None, None, None, None, None, None, None, None, 23]

警告:我不确定这是解决问题的最佳方案。可能还有其他方式,具体取决于您真正需要的方式。

© www.soinside.com 2019 - 2024. All rights reserved.