Skip to content

Commit 4ebaae8

Browse files
authored
Improve comments in itertools uniquification recipes (GH-100631)
1 parent 4652182 commit 4ebaae8

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

Doc/library/itertools.rst

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,27 +1019,30 @@ which incur interpreter overhead.
10191019
def unique_everseen(iterable, key=None):
10201020
"List unique elements, preserving order. Remember all elements ever seen."
10211021
# unique_everseen('AAAABBBCCDAABBB') --> A B C D
1022-
# unique_everseen('ABBCcAD', str.lower) --> A B C D
1022+
# unique_everseen('ABBcCAD', str.lower) --> A B c D
10231023
seen = set()
10241024
if key is None:
10251025
for element in filterfalse(seen.__contains__, iterable):
10261026
seen.add(element)
10271027
yield element
1028-
# Note: The steps shown above are intended to demonstrate
1029-
# filterfalse(). For order preserving deduplication,
1030-
# a better solution is:
1028+
# For order preserving deduplication,
1029+
# a faster but non-lazy solution is:
10311030
# yield from dict.fromkeys(iterable)
10321031
else:
10331032
for element in iterable:
10341033
k = key(element)
10351034
if k not in seen:
10361035
seen.add(k)
10371036
yield element
1037+
# For use cases that allow the last matching element to be returned,
1038+
# a faster but non-lazy solution is:
1039+
# t1, t2 = tee(iterable)
1040+
# yield from dict(zip(map(key, t1), t2)).values()
10381041

10391042
def unique_justseen(iterable, key=None):
10401043
"List unique elements, preserving order. Remember only the element just seen."
10411044
# unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
1042-
# unique_justseen('ABBCcAD', str.lower) --> A B C A D
1045+
# unique_justseen('ABBcCAD', str.lower) --> A B c A D
10431046
return map(next, map(operator.itemgetter(1), groupby(iterable, key)))
10441047

10451048
def iter_except(func, exception, first=None):
@@ -1371,15 +1374,17 @@ which incur interpreter overhead.
13711374

13721375
>>> list(unique_everseen('AAAABBBCCDAABBB'))
13731376
['A', 'B', 'C', 'D']
1374-
13751377
>>> list(unique_everseen('ABBCcAD', str.lower))
13761378
['A', 'B', 'C', 'D']
1379+
>>> list(unique_everseen('ABBcCAD', str.lower))
1380+
['A', 'B', 'c', 'D']
13771381

13781382
>>> list(unique_justseen('AAAABBBCCDAABBB'))
13791383
['A', 'B', 'C', 'D', 'A', 'B']
1380-
13811384
>>> list(unique_justseen('ABBCcAD', str.lower))
13821385
['A', 'B', 'C', 'A', 'D']
1386+
>>> list(unique_justseen('ABBcCAD', str.lower))
1387+
['A', 'B', 'c', 'A', 'D']
13831388

13841389
>>> d = dict(a=1, b=2, c=3)
13851390
>>> it = iter_except(d.popitem, KeyError)

0 commit comments

Comments
 (0)