在c / c ++中,我们可以:
maxnum = 10;
double xlist[maxnum];
如何设置python列表/集的最大长度?
答案 0 :(得分:21)
你不需要也不需要。
Python列表根据需要动态增长和缩小以适应其内容。集合实现为哈希表,并且像Python字典一样根据需要动态增长和缩小以适应其内容。
也许您正在寻找collections.deque
(需要maxlen
参数)或使用heapq
(当您达到最大值时使用heapq.heappushpop()
)代替?< / p>
答案 1 :(得分:11)
这是python的list
的扩展版本。它的行为类似于list
,但如果超过了长度,则会引发BoundExceedError
(在python 2.7中尝试过):
class BoundExceedError(Exception):
pass
class BoundList(list):
def __init__(self, *args, **kwargs):
self.length = kwargs.pop('length', None)
super(BoundList, self).__init__(*args, **kwargs)
def _check_item_bound(self):
if self.length and len(self) >= self.length:
raise BoundExceedError()
def _check_list_bound(self, L):
if self.length and len(self) + len(L) > self.length:
raise BoundExceedError()
def append(self, x):
self._check_item_bound()
return super(BoundList, self).append(x)
def extend(self, L):
self._check_list_bound(L)
return super(BoundList, self).extend(L)
def insert(self, i, x):
self._check_item_bound()
return super(BoundList, self).insert(i, x)
def __add__(self, L):
self._check_list_bound(L)
return super(BoundList, self).__add__(L)
def __iadd__(self, L):
self._check_list_bound(L)
return super(BoundList, self).__iadd__(L)
def __setslice__(self, *args, **kwargs):
if len(args) > 2 and self.length:
left, right, L = args[0], args[1], args[2]
if right > self.length:
if left + len(L) > self.length:
raise BoundExceedError()
else:
len_del = (right - left)
len_add = len(L)
if len(self) - len_del + len_add > self.length:
raise BoundExceedError()
return super(BoundList, self).__setslice__(*args, **kwargs)
<强>用法强>:
>>> l = BoundList(length=10)
>>> l.extend([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> l
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> # now all these attempts will raise BoundExceedError:
>>> l.append(11)
>>> l.insert(0, 11)
>>> l.extend([11])
>>> l += [11]
>>> l + [11]
>>> l[len(l):] = [11]
答案 2 :(得分:7)
获得列表lst
后,您可以
if len(lst)>10:
lst = lst[:10]
如果大小超过10个元素,则截断为前十个元素。
答案 3 :(得分:3)
你不能,列表和集合本质上是动态的,可以增长到任何大小。
Python不是c ++,python是一种动态语言。集和列表可以扩展或缩小到任何大小。
如果您想要可迭代的x个最小或最大项目,请使用heapq模块。
heapq.nsmallest(n, iterable[, key])
返回一个列表,其中包含由定义的数据集中的n个最小元素 迭代。 key,如果提供,则指定一个参数的函数 用于从iterable中的每个元素中提取比较键: key = str.lower相当于:sorted(iterable,key = key)[:n]
或者可能是bisect模块:
此模块支持按排序顺序维护列表 无需在每次插入后对列表进行排序。
然后使用切片或itertools.slice
从列表中获取前x个项目。