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遍历 truple list dictionary的几种方法总结
Sep 11 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
Jan 15 Python
python最小生成树kruskal与prim算法详解
Jan 17 Python
python数据挖掘需要学的内容
Jun 23 Python
15行Python代码实现免费发送手机短信推送消息功能
Feb 27 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
在spyder IPython console中,运行代码加入参数的实例
Apr 20 Python
Python urllib.request对象案例解析
May 11 Python
Python3.9新特性详解
Oct 10 Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
Apr 06 Python
pytorch 带batch的tensor类型图像显示操作
May 20 Python
Python图片检索之以图搜图
May 31 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自动更新新闻DIY
2006/10/09 PHP
php url路由入门实例
2014/04/23 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
php简单实现查询数据库返回json数据
2015/04/16 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
jQuery示例收集
2010/11/05 Javascript
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
2013/02/04 Javascript
JQuery操作三大控件(下拉,单选,复选)的方法
2013/08/06 Javascript
js判断上传文件的类型和大小示例代码
2013/10/18 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
python计算列表内各元素的个数实例
2018/06/29 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
毕业生物理教师求职信
2013/10/17 职场文书
应届生护士求职信
2013/11/01 职场文书
教师民族团结演讲稿
2014/08/27 职场文书
六年级学生期末评语
2014/12/26 职场文书
幼儿园小班教育随笔
2015/08/14 职场文书
同学会演讲稿
2019/04/02 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
如何利用map实现Nginx允许多个域名跨域
2021/03/31 Servers
Windows server 2012搭建FTP服务器
2022/04/29 Servers