Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法


Posted in Python onMarch 13, 2018

本文实例讲述了Python从序列中移除重复项且保持元素间顺序不变的方法。分享给大家供大家参考,具体如下:

问题:从序列中移除重复的元素,但仍然保持剩下的元素顺序不变

解决方案:

1、如果序列中的值时可哈希(hashable)的,可以通过使用集合和生成器解决。

# example.py
#
# Remove duplicate entries from a sequence while keeping order
def dedupe(items):
  seen = set()
  for item in items:
    if item not in seen:
      yield item
      seen.add(item)
if __name__ == '__main__':
  a = [1, 5, 2, 1, 9, 1, 5, 10]
  print(a)
  print(list(dedupe(a)))

运行结果:

[1, 5, 2, 1, 9, 1, 5, 10]
[1, 5, 2, 9, 10]

2、如果序列时不可哈希的,想要去除重复项,需要对上述代码稍作修改:

# example2.py
#
# Remove duplicate entries from a sequence while keeping order
def dedupe(items, key=None):
  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)
if __name__ == '__main__':
  a = [ 
    {'x': 2, 'y': 3},
    {'x': 1, 'y': 4},
    {'x': 2, 'y': 3},
    {'x': 2, 'y': 3},
    {'x': 10, 'y': 15}
    ]
  print(a)
  print(list(dedupe(a, key=lambda a: (a['x'],a['y']))))

运行结果:

[{'x': 2, 'y': 3}, {'x': 1, 'y': 4}, {'x': 2, 'y': 3}, {'x': 2, 'y': 3}, {'x': 10, 'y': 15}]
[{'x': 2, 'y': 3}, {'x': 1, 'y': 4}, {'x': 10, 'y': 15}]

key参数的作用是指定一个函数用来将序列中的元素转化为可哈希的类型,如此可以检测重复项。

(代码摘自《Python Cookbook》)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python在windows下实现ping操作并接收返回信息的方法
Mar 20 Python
Python抓取电影天堂电影信息的代码
Apr 07 Python
Windows下Python2与Python3两个版本共存的方法详解
Feb 12 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
分享一下如何编写高效且优雅的 Python 代码
Sep 07 Python
AI人工智能 Python实现人机对话
Nov 13 Python
对Python中type打开文件的方式介绍
Apr 28 Python
详解PyCharm安装MicroPython插件的教程
Jun 24 Python
浅析PyTorch中nn.Module的使用
Aug 18 Python
python 实现矩阵按对角线打印
Nov 29 Python
Python中的xlrd模块使用原理解析
May 21 Python
使用Python pip怎么升级pip
Aug 11 Python
Python+Django搭建自己的blog网站
Mar 13 #Python
python实现人脸识别经典算法(一) 特征脸法
Mar 13 #Python
tensorflow实现softma识别MNIST
Mar 12 #Python
wxpython实现图书管理系统
Mar 12 #Python
人生苦短我用python python如何快速入门?
Mar 12 #Python
tensorflow实现KNN识别MNIST
Mar 12 #Python
Python操作MySQL模拟银行转账
Mar 12 #Python
You might like
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
2018/11/28 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
python中from module import * 的一个坑
2014/07/20 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
Python requests上传文件实现步骤
2020/09/15 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
群胜软件Java笔试题
2012/09/29 面试题
办公室岗位职责
2014/02/12 职场文书
初三班主任寄语大全
2014/04/04 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
奥运会口号
2014/06/13 职场文书
四风问题个人剖析材料
2014/10/07 职场文书
2014村党支部书记党建工作汇报材料
2014/11/02 职场文书
行风评议整改报告
2014/11/06 职场文书
宇宙与人观后感
2015/06/05 职场文书
宝葫芦的秘密观后感
2015/06/11 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis
JS实现简单的九宫格抽奖
2022/06/28 Javascript