Skip to content

Commit 63111bf

Browse files
authored
Add unique() recipe to itertools docs (gh-119911)
1 parent 7dc745d commit 63111bf

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

Doc/library/itertools.rst

+14-2
Original file line numberDiff line numberDiff line change
@@ -857,15 +857,15 @@ and :term:`generators <generator>` which incur interpreter overhead.
857857
return len(take(2, groupby(iterable, key))) <= 1
858858

859859
def unique_justseen(iterable, key=None):
860-
"List unique elements, preserving order. Remember only the element just seen."
860+
"Yield unique elements, preserving order. Remember only the element just seen."
861861
# unique_justseen('AAAABBBCCDAABBB') → A B C D A B
862862
# unique_justseen('ABBcCAD', str.casefold) → A B c A D
863863
if key is None:
864864
return map(operator.itemgetter(0), groupby(iterable))
865865
return map(next, map(operator.itemgetter(1), groupby(iterable, key)))
866866

867867
def unique_everseen(iterable, key=None):
868-
"List unique elements, preserving order. Remember all elements ever seen."
868+
"Yield unique elements, preserving order. Remember all elements ever seen."
869869
# unique_everseen('AAAABBBCCDAABBB') → A B C D
870870
# unique_everseen('ABBcCAD', str.casefold) → A B c D
871871
seen = set()
@@ -880,6 +880,11 @@ and :term:`generators <generator>` which incur interpreter overhead.
880880
seen.add(k)
881881
yield element
882882

883+
def unique(iterable, key=None, reverse=False):
884+
"Yield unique elements in sorted order. Supports unhashable inputs."
885+
# unique([[1, 2], [3, 4], [1, 2]]) → [1, 2] [3, 4]
886+
return unique_justseen(sorted(iterable, key=key, reverse=reverse), key=key)
887+
883888
def sliding_window(iterable, n):
884889
"Collect data into overlapping fixed-length chunks or blocks."
885890
# sliding_window('ABCDEFG', 4) → ABCD BCDE CDEF DEFG
@@ -1605,6 +1610,13 @@ The following recipes have a more mathematical flavor:
16051610
>>> ''.join(input_iterator)
16061611
'AAABBBCCDAABBB'
16071612

1613+
>>> list(unique([[1, 2], [3, 4], [1, 2]]))
1614+
[[1, 2], [3, 4]]
1615+
>>> list(unique('ABBcCAD', str.casefold))
1616+
['A', 'B', 'c', 'D']
1617+
>>> list(unique('ABBcCAD', str.casefold, reverse=True))
1618+
['D', 'c', 'B', 'A']
1619+
16081620
>>> d = dict(a=1, b=2, c=3)
16091621
>>> it = iter_except(d.popitem, KeyError)
16101622
>>> d['d'] = 4

0 commit comments

Comments
 (0)