Skip to content

Commit 1800630

Browse files
[3.11] Improve comments in itertools uniquification recipes (GH-100631) (GH-100632)
1 parent b1e314a commit 1800630

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
@@ -989,27 +989,30 @@ which incur interpreter overhead.
989989
def unique_everseen(iterable, key=None):
990990
"List unique elements, preserving order. Remember all elements ever seen."
991991
# unique_everseen('AAAABBBCCDAABBB') --> A B C D
992-
# unique_everseen('ABBCcAD', str.lower) --> A B C D
992+
# unique_everseen('ABBcCAD', str.lower) --> A B c D
993993
seen = set()
994994
if key is None:
995995
for element in filterfalse(seen.__contains__, iterable):
996996
seen.add(element)
997997
yield element
998-
# Note: The steps shown above are intended to demonstrate
999-
# filterfalse(). For order preserving deduplication,
1000-
# a better solution is:
998+
# For order preserving deduplication,
999+
# a faster but non-lazy solution is:
10011000
# yield from dict.fromkeys(iterable)
10021001
else:
10031002
for element in iterable:
10041003
k = key(element)
10051004
if k not in seen:
10061005
seen.add(k)
10071006
yield element
1007+
# For use cases that allow the last matching element to be returned,
1008+
# a faster but non-lazy solution is:
1009+
# t1, t2 = tee(iterable)
1010+
# yield from dict(zip(map(key, t1), t2)).values()
10081011

10091012
def unique_justseen(iterable, key=None):
10101013
"List unique elements, preserving order. Remember only the element just seen."
10111014
# unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
1012-
# unique_justseen('ABBCcAD', str.lower) --> A B C A D
1015+
# unique_justseen('ABBcCAD', str.lower) --> A B c A D
10131016
return map(next, map(operator.itemgetter(1), groupby(iterable, key)))
10141017

10151018
def iter_except(func, exception, first=None):
@@ -1365,15 +1368,17 @@ which incur interpreter overhead.
13651368

13661369
>>> list(unique_everseen('AAAABBBCCDAABBB'))
13671370
['A', 'B', 'C', 'D']
1368-
13691371
>>> list(unique_everseen('ABBCcAD', str.lower))
13701372
['A', 'B', 'C', 'D']
1373+
>>> list(unique_everseen('ABBcCAD', str.lower))
1374+
['A', 'B', 'c', 'D']
13711375

13721376
>>> list(unique_justseen('AAAABBBCCDAABBB'))
13731377
['A', 'B', 'C', 'D', 'A', 'B']
1374-
13751378
>>> list(unique_justseen('ABBCcAD', str.lower))
13761379
['A', 'B', 'C', 'A', 'D']
1380+
>>> list(unique_justseen('ABBcCAD', str.lower))
1381+
['A', 'B', 'c', 'A', 'D']
13771382

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

0 commit comments

Comments
 (0)