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解析xml模块封装代码
Feb 07 Python
Python ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
Python实现高效求解素数代码实例
Jun 30 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 Python
Python实现针对中文排序的方法
May 09 Python
numpy matrix和array的乘和加实例
Jun 28 Python
pandas中的series数据类型详解
Jul 06 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
Jul 11 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
keras.layer.input()用法说明
Jun 16 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 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
SMARTY学习手记
2007/01/04 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
PHP书写格式详解(必看)
2016/05/23 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
Yii 实现数据加密和解密
2021/03/09 PHP
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
浅析Python中的join()方法的使用
2015/05/19 Python
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
Python爬取数据并实现可视化代码解析
2020/08/12 Python
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
视图的作用
2014/12/19 面试题
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
询价采购方案
2014/06/09 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
2014企业年终工作总结
2014/12/23 职场文书
学术会议领导致辞
2015/07/29 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
python Django框架快速入门教程(后台管理)
2021/07/21 Python