이 기사는 시퀀스에서 중복 항목을 제거하고 요소의 순서를 변경하지 않고 유지하는 Python의 구현에 관한 것입니다. 필요한 친구가 참고할 수 있기를 바랍니다. .
1. 요구 사항
시퀀스에 나타나는 중복 요소를 제거하고 싶지만 나머지 요소의 순서는 변경되지 않고 유지됩니다.중복 항목만 제거하려는 경우 일반적으로 간단하고 간단한 방법은 컬렉션을 만드는 것입니다.
a=[1,5,4,36,7,8,2,3,5,7] #结果为:{1, 2, 3, 4, 5, 36, 7, 8} print(set(a))
2, 솔루션
#🎜 🎜 #시퀀스의 값이 해시 가능하다면 이 문제는 집합과 생성기를 사용하여 쉽게 해결할 수 있습니다.객체가 해시 가능한 경우 해당 객체는 수명 동안 불변이어야 하며
메서드가 있어야 합니다. 정수, 부동 소수점 숫자, 문자열 및 요소는 모두 변경할 수 없습니다.def dedupe(items): seen=set() for item in items: if item not in seen: yield item seen.add(item) a=[1,2,3,1,9,1,5,10] print(list(dedupe(a)))
__hash__()
실행 결과:
[1, 2, 3, 9, 5, 10]이 작업은 시퀀스의 요소가 해시 가능한 경우에만 수행할 수 있습니다. 해시할 수 없는 개체 시퀀스에서 중복 항목을 제거하려면 위 코드를 약간 수정해야 합니다.
def dedupe(items,key=None): seen=set() for item in items: value=item if key is None else key(item) if value not in seen: yield item seen.add(value) a=[ {'x':1,'y':2}, {'x':1,'y':3}, {'x':1,'y':4}, {'x':1,'y':2}, {'x':1,'y':3}, {'x':1,'y':1}, ] print(list(dedupe(a,key=lambda d:(d['x'],d['y'])))) print(list(dedupe(a,key=lambda d:d['y'])))실행 결과:
[{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 1, 'y': 4}, {'x': 1, 'y': 1}] [{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 1, 'y': 4}, {'x': 1, 'y': 1}]여기서 매개변수 키의 기능은 다음과 같습니다. 중복을 감지하기 위해 시퀀스의 요소를 해시 가능한 유형으로 변환하는 함수를 지정합니다.
위 내용은 Python은 요소 순서를 변경하지 않고 시퀀스에서 중복 제거를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!