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标准库urllib2的一些使用细节总结
Mar 16 Python
python实现发送和获取手机短信验证码
Jan 15 Python
python tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
python实现的多任务版udp聊天器功能案例
Nov 13 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
Mar 14 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
Mar 31 Python
Python 炫技操作之合并字典的七种方法
Apr 10 Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 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用mysql数据库存储session的代码
2010/03/05 PHP
JS 网站性能优化笔记
2011/05/24 PHP
php Xdebug的安装与使用详解
2013/06/20 PHP
thinkphp实现多语言功能(语言包)
2014/03/04 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
在Python中使用dict和set方法的教程
2015/04/27 Python
Python创建模块及模块导入的方法
2015/05/27 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
django 多数据库配置教程
2018/05/30 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
优秀中专生推荐信
2013/11/17 职场文书
应届生法律顾问求职信
2013/11/19 职场文书
文明之星事迹材料
2014/05/09 职场文书
贷款承诺书范文
2014/05/19 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android