最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python实现从序列中移除重复项且保持元素间顺序不变

来源:动视网 责编:小采 时间:2020-11-27 14:20:55
文档

Python实现从序列中移除重复项且保持元素间顺序不变

Python实现从序列中移除重复项且保持元素间顺序不变:本篇文章给大家带来的内容是关于Python实现从序列中移除重复项且保持元素间顺序不变,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。1、需求我们想去除序列出现的重复元素,但仍然保持剩下的元素的顺序不变。如果只是想要去重,那么通常足
推荐度:
导读Python实现从序列中移除重复项且保持元素间顺序不变:本篇文章给大家带来的内容是关于Python实现从序列中移除重复项且保持元素间顺序不变,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。1、需求我们想去除序列出现的重复元素,但仍然保持剩下的元素的顺序不变。如果只是想要去重,那么通常足


本篇文章给大家带来的内容是关于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、解决方案

如果序列中的值是可哈希的(hashable),那么这个问题可以通过使用集合和生成器轻松解决。

如果一个对象是可哈希的,那么它的生存期内必须是不可变的,它需要有一个__hash__()方法。整数、浮点数、字符串、元素都是不可变的。
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)))

运行结果:

[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}]

这里的参数key的作用是指定一个函数用来将序列中的元素转换为可哈希的类型,那么做的目的是为了检测重复项。

文档

Python实现从序列中移除重复项且保持元素间顺序不变

Python实现从序列中移除重复项且保持元素间顺序不变:本篇文章给大家带来的内容是关于Python实现从序列中移除重复项且保持元素间顺序不变,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。1、需求我们想去除序列出现的重复元素,但仍然保持剩下的元素的顺序不变。如果只是想要去重,那么通常足
推荐度:
标签: 数据 元素 python
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top