mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	
		
			
	
	
		
			20 lines
		
	
	
	
		
			607 B
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			20 lines
		
	
	
	
		
			607 B
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from itertools import filterfalse | ||
|  | 
 | ||
|  | 
 | ||
|  | def unique_everseen(iterable, key=None): | ||
|  |     "List unique elements, preserving order. Remember all elements ever seen." | ||
|  |     # unique_everseen('AAAABBBCCDAABBB') --> A B C D | ||
|  |     # unique_everseen('ABBCcAD', str.lower) --> A B C D | ||
|  |     seen = set() | ||
|  |     seen_add = seen.add | ||
|  |     if key is None: | ||
|  |         for element in filterfalse(seen.__contains__, iterable): | ||
|  |             seen_add(element) | ||
|  |             yield element | ||
|  |     else: | ||
|  |         for element in iterable: | ||
|  |             k = key(element) | ||
|  |             if k not in seen: | ||
|  |                 seen_add(k) | ||
|  |                 yield element |