|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
对序列中移除重复项且保持元素间顺序不变
问题描述:
去掉重复元素,但其中的原始顺序不变
一、可哈希的序列
可哈希:在生存期期间不变,有__hash__方法
如整型,字符串,元组,浮点数 def dequpe(items):
seen = list()
for i in items:
if i not in seen:
yield i
seen.append(i)
# 列表可以实现
a = [1, 1, 2, 3, 4, 5, 4, 5, 6, 2, 7, 10]
print(list(dequpe(a)))
[1, 2, 3, 4, 5, 6, 7, 10]
二、不可哈希或比较复杂的数据结构def dequpe_plus(items, key=None):
seen = list()
for i in items:
val = i if key is None else key(i)
if val not in seen:
yield i
seen.append(val)
b = [{"a": 1, "b": 2}, {"a": 2, "b": 1}, {
"a": 1, "b": 2}, {"a": 3, "b": 3}, {"a": 1, "b": 4}]
print(list(dequpe_plus(b, key=lambda d: (d["a"], d["b"])))) # a,b值不重复
print(list(dequpe_plus(b, key=lambda d: d["a"]))) # a的值不重复
[{'a': 1, 'b': 2}, {'a': 2, 'b': 1}, {'a': 3, 'b': 3}, {'a': 1, 'b': 4}]
[{'a': 1, 'b': 2}, {'a': 2, 'b': 1}, {'a': 3, 'b': 3}]
|
|