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中使用CasperJS获取JS渲染生成的HTML内容的教程
Apr 09 Python
Python读大数据txt
Mar 28 Python
Python实现多并发访问网站功能示例
Jun 19 Python
python文件特定行插入和替换实例详解
Jul 12 Python
python基于twisted框架编写简单聊天室
Jan 02 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
Python中asyncio模块的深入讲解
Jun 10 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
基于python实现破解滑动验证码过程解析
May 28 Python
详解Python 中的容器 collections
Aug 17 Python
python利用递归方法实现求集合的幂集
Sep 07 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异步执行的常用方式详解
2013/06/03 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
让getElementsByName适应IE和firefox的方法
2007/09/24 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
原生js实现随机点名功能
2019/11/05 Javascript
使用Python绘制图表大全总结
2017/02/11 Python
Python 异常处理的实例详解
2017/09/11 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
对命令行模式与python交互模式介绍
2018/05/12 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
python安装gdal的两种方法
2019/10/29 Python
keras之权重初始化方式
2020/05/21 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
一套带网友答案的.NET笔试题
2016/12/06 面试题
保险专业大专生求职信
2013/10/26 职场文书
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
主治医师岗位职责
2013/12/10 职场文书
工程资料员岗位职责
2014/03/10 职场文书
《春天来了》教学反思
2014/04/07 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
水知道答案观后感
2015/06/08 职场文书
退休欢送会主持词
2015/07/01 职场文书
新党员入党决心书
2015/09/22 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript