39 lines
836 B
Python
39 lines
836 B
Python
#!/usr/bin/env python
|
|
# -*- encoding: utf-8 -*-
|
|
"""
|
|
Topic: 消除序列重复值并保持顺序
|
|
Desc :
|
|
"""
|
|
|
|
|
|
def dedupe(items):
|
|
"""元素都是hashable"""
|
|
seen = set()
|
|
for item in items:
|
|
if item not in seen:
|
|
yield item
|
|
seen.add(item)
|
|
|
|
|
|
def dedupe2(items, key=None):
|
|
"""元素不是hashable的时候"""
|
|
seen = set()
|
|
for item in items:
|
|
val = item if key is None else key(item)
|
|
if val not in seen:
|
|
yield item
|
|
seen.add(val)
|
|
|
|
|
|
def remove_dup():
|
|
a = [1, 5, 2, 1, 9, 1, 5, 10]
|
|
print(list(dedupe(a)))
|
|
|
|
a = [{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 1, 'y': 2}, {'x': 2, 'y': 4}]
|
|
print(list(dedupe2(a, key=lambda d: (d['x'], d['y']))))
|
|
print(list(dedupe2(a, key=lambda d: d['x'])))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
remove_dup()
|