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实现拉钩网上的FizzBuzzWhizz问题示例
May 05 Python
分享Python文本生成二维码实例
Jan 06 Python
Python中使用多进程来实现并行处理的方法小结
Aug 09 Python
为什么Python中没有"a++"这种写法
Nov 27 Python
Python语言快速上手学习方法
Dec 14 Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 Python
Django admin禁用编辑链接和添加删除操作详解
Nov 15 Python
opencv python在视屏上截图功能的实现
Mar 05 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
Mar 06 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
Jun 02 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
Jul 14 Python
python如何将mat文件转为png
Jul 15 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
用PHP4访问Oracle815
2006/10/09 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
基于PHP实现的多元线性回归模拟曲线算法
2018/01/30 PHP
PHP后期静态绑定之self::限制实例分析
2018/12/21 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
2014/06/03 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
Js代码中的span拼接问题解决
2019/11/22 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
python学习——内置函数、数据结构、标准库的技巧(推荐)
2019/04/18 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
Django组件content-type使用方法详解
2019/07/19 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
外贸专业求职信
2014/03/09 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书