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登陆asp网站页面的实现代码
Jan 14 Python
python3+PyQt5实现自定义分数滑块部件
Apr 24 Python
python numpy 显示图像阵列的实例
Jul 02 Python
Python并发之多进程的方法实例代码
Aug 15 Python
python3.x 生成3维随机数组实例
Nov 28 Python
Python要如何实现列表排序的几种方法
Feb 21 Python
python简单实现最大似然估计&scipy库的使用详解
Apr 15 Python
Python的历史与优缺点整理
May 26 Python
什么是python的必选参数
Jun 21 Python
PyTorch的torch.cat用法
Jun 28 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 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&java(一)
2006/10/09 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
PHP实现简单的计算器
2020/08/28 PHP
Javascript学习笔记8 用JSON做原型
2010/01/11 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
常用的 JS 排序算法 整理版
2018/04/05 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
JS数据类型判断的几种常用方法
2020/07/07 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[01:14]英雄,所敬略同——2018完美盛典宣传视频4K
2018/12/05 DOTA
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
python装饰器实例大详解
2017/10/25 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
在python中使用nohup命令说明
2020/04/16 Python
Python configparser模块操作代码实例
2020/06/08 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
python中tab键是什么意思
2020/06/18 Python
介绍一下Make? 为什么使用make
2016/07/31 面试题
优秀班主任材料
2014/12/16 职场文书
2015年五四青年节活动总结
2015/02/10 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
仙境之桥观后感
2015/06/16 职场文书