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中多线程及程序锁浅析
Jan 21 Python
Python实现的Google IP 可用性检测脚本
Apr 23 Python
Python使用pyh生成HTML文档的方法示例
Mar 10 Python
Python使用sort和class实现的多级排序功能示例
Aug 15 Python
Python字符串逆序输出的实例讲解
Feb 16 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
python3模拟实现xshell远程执行liunx命令的方法
Jul 12 Python
python多线程并发及测试框架案例
Oct 15 Python
Python 中如何实现参数化测试的方法示例
Dec 10 Python
详解用python -m http.server搭一个简易的本地局域网
Sep 24 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
Nov 01 Python
OpenCV-Python实现轮廓拟合
Jun 08 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
php获取mysql数据库中的所有表名的代码
2011/04/23 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
jquery 表单取值常用代码
2009/12/22 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
使用Promise封装小程序wx.request的实现方法
2019/11/13 Javascript
python操作MongoDB基础知识
2013/11/01 Python
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
详解Python3定时器任务代码
2019/09/23 Python
keras多显卡训练方式
2020/06/10 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
python 实现简易的记事本
2020/11/30 Python
什么是网络协议
2016/04/07 面试题
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
当x.equals(y)等于true时,x.hashCode()与y.hashCode()可以不相等,这句话对不对
2015/05/02 面试题
计算机专业优秀大学生自我总结
2014/01/21 职场文书
管事部库房保管员岗位职责
2014/02/21 职场文书
化学教育专业求职信
2014/07/08 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书
长城的导游词
2015/01/30 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
爱的教育读书笔记
2015/06/26 职场文书
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL
Java实现二分搜索树的示例代码
2022/03/17 Java/Android