Comments
Patch
@@ -2216,6 +2216,9 @@ class baseset(list):
super(baseset, self).__init__(data)
self._set = None
+ def __length_hint__(self):
+ return len(self)
+
def ascending(self):
"""Sorts the set in ascending order (in place).
@@ -2388,6 +2391,9 @@ class lazyset(object):
l = baseset([r for r in self])
return len(l)
+ def __length_hint__(self):
+ return _getlengthhint(self._subset)
+
def __getitem__(self, x):
# Basic implementation to be changed in future patches.
l = baseset([r for r in self])
@@ -2490,6 +2496,13 @@ class _addset(_orderedsetmixin):
def __len__(self):
return len(self._list)
+ def __length_hint__(self):
+ left = _getlengthhint(self._r1)
+ right = _getlengthhint(self._r2)
+ if left is not None and right is not None:
+ return left + right
+ return None
+
@util.propertycache
def _list(self):
if not self._genlist:
@@ -2700,6 +2713,9 @@ class _generatorset(object):
def set(self):
return self
+ def __length_hint__(self):
+ return _getlengthhint(self._gen)
+
def sort(self, reverse=False):
if not self._finished:
for i in self:
@@ -2812,6 +2828,9 @@ class _spanset(_orderedsetmixin):
for r in iterrange:
yield r
+ def __length_hint__(self):
+ return abs(self._start - self._end)
+
def __contains__(self, rev):
start = self._start
end = self._end