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 相关文章推荐
Ubuntu 下 vim 搭建python 环境 配置
Jun 12 Python
python逆向入门教程
Jan 15 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
flask实现验证码并验证功能
Dec 05 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
Jan 10 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
python网络编程之五子棋游戏
May 14 Python
一篇文章搞懂python的转义字符及用法
Sep 03 Python
python 基于Apscheduler实现定时任务
Dec 15 Python
Python实现照片卡通化
Dec 06 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基本函数汇总
2015/07/09 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
Javascript - HTML的request类
2007/01/09 Javascript
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
JavaScript Canvas实现验证码
2020/08/02 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
Python自动连接ssh的方法
2015/03/07 Python
python自动格式化json文件的方法
2015/03/11 Python
python梯度下降法的简单示例
2018/08/31 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
2021/03/04 Python
缓刑人员的思想汇报
2014/01/11 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
如何写好建议书
2014/03/13 职场文书
文明村创建实施方案
2014/03/27 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
MySQL索引失效的典型案例
2021/06/05 MySQL