You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			24 lines
		
	
	
		
			657 B
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			24 lines
		
	
	
		
			657 B
		
	
	
	
		
			Python
		
	
from more_itertools import consume  # noqa: F401
 | 
						|
 | 
						|
 | 
						|
# copied from jaraco.itertools 6.1
 | 
						|
def ensure_unique(iterable, key=lambda x: x):
 | 
						|
    """
 | 
						|
    Wrap an iterable to raise a ValueError if non-unique values are encountered.
 | 
						|
 | 
						|
    >>> list(ensure_unique('abc'))
 | 
						|
    ['a', 'b', 'c']
 | 
						|
    >>> consume(ensure_unique('abca'))
 | 
						|
    Traceback (most recent call last):
 | 
						|
    ...
 | 
						|
    ValueError: Duplicate element 'a' encountered.
 | 
						|
    """
 | 
						|
    seen = set()
 | 
						|
    seen_add = seen.add
 | 
						|
    for element in iterable:
 | 
						|
        k = key(element)
 | 
						|
        if k in seen:
 | 
						|
            raise ValueError(f"Duplicate element {element!r} encountered.")
 | 
						|
        seen_add(k)
 | 
						|
        yield element
 |