>  기사  >  백엔드 개발  >  Python은 요소 순서를 변경하지 않고 시퀀스에서 중복 제거를 구현합니다.

Python은 요소 순서를 변경하지 않고 시퀀스에서 중복 제거를 구현합니다.

不言
不言앞으로
2018-10-15 14:15:332463검색

이 기사는 시퀀스에서 중복 항목을 제거하고 요소의 순서를 변경하지 않고 유지하는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제