[kupfer] datatools: Add UniqueIterator, iterate with set uniqueness semantics
- From: Ulrik Sverdrup <usverdrup src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [kupfer] datatools: Add UniqueIterator, iterate with set uniqueness semantics
- Date: Mon, 4 Jan 2010 18:34:31 +0000 (UTC)
commit bd172f4efbd80364dc7d3e1f5c307074b1a547fc
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date: Mon Jan 4 15:29:02 2010 +0100
datatools: Add UniqueIterator, iterate with set uniqueness semantics
kupfer/datatools.py | 23 +++++++++++++++++++++++
1 files changed, 23 insertions(+), 0 deletions(-)
---
diff --git a/kupfer/datatools.py b/kupfer/datatools.py
index 845d299..c5ae3e8 100644
--- a/kupfer/datatools.py
+++ b/kupfer/datatools.py
@@ -70,6 +70,29 @@ class SavedIterable (object):
# (callable, args, state, listitems)
return (list, (), None, iter(self))
+def UniqueIterator(seq, key=None):
+ """
+ yield items of @seq with set semantics; no duplicates
+
+ >>> list(UniqueIterator([1, 2, 3, 3, 5, 1]))
+ [1, 2, 3, 5]
+ >>> list(UniqueIterator([1, -2, 3, -3, -5, 2], key=abs))
+ [1, -2, 3, -5]
+ """
+ coll = set()
+ if key is None:
+ for obj in seq:
+ if obj not in coll:
+ yield obj
+ coll.add(obj)
+ return
+ else:
+ for obj in seq:
+ K = key(obj)
+ if K not in coll:
+ yield obj
+ coll.add(K)
+
if __name__ == '__main__':
import doctest
doctest.testmod()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]