我是Python语言的新手,我问这个问题是否可以创建每个位置具有相同值的列表(可能是无限的)。例如,我想创建一个在每个位置都有False
的列表,例如:
list = []
for i in range(400):
list.append(False)
我希望有一种方法可以不设置“上限”(示例中为400),并且每次访问列表位置(n + 1)时总是返回False并且不会超出范围。谢谢您的帮助!
你可以使用自己的类。
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]
警告:我不确定这是解决问题的最佳方案。可能还有其他方式,具体取决于您真正需要的方式。