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 命令行也可以自动补全
Nov 30 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
python实现kMeans算法
Dec 21 Python
python3使用SMTP发送简单文本邮件
Jun 19 Python
Python迭代器与生成器用法实例分析
Jul 09 Python
基于Python实现定时自动给微信好友发送天气预报
Oct 25 Python
2019 Python最新面试题及答案16道题
Apr 11 Python
python 寻找离散序列极值点的方法
Jul 10 Python
python搜索包的路径的实现方法
Jul 19 Python
python求一个字符串的所有排列的实现方法
Feb 04 Python
Python操作Elasticsearch处理timeout超时
Jul 17 Python
python实现自定义日志的具体方法
May 28 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实现的curl批量请求操作示例
2018/06/06 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
2018/09/30 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
Python selenium 三种等待方式解读
2016/09/15 Python
Python3 socket同步通信简单示例
2017/06/07 Python
python框架中flask知识点总结
2018/08/17 Python
python isinstance函数用法详解
2020/02/13 Python
python Pexpect模块的使用
2020/12/25 Python
母亲追悼会答谢词
2014/01/27 职场文书
致跳高运动员加油稿
2014/02/12 职场文书
2014年情人节活动方案
2014/02/16 职场文书
酒店端午节促销方案
2014/02/18 职场文书
心理学专业求职信
2014/06/16 职场文书
委托证明书
2014/09/17 职场文书
小学教研工作总结2015
2015/05/13 职场文书
考研英语辞职信
2015/05/13 职场文书
回门宴新娘答谢词
2015/09/29 职场文书
学校教师培训工作总结
2015/10/14 职场文书
校园安全教育心得体会
2016/01/15 职场文书
opencv 分类白天与夜景视频的方法
2021/06/05 Python
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android