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 相关文章推荐
tornado框架blog模块分析与使用
Nov 21 Python
Python单元测试框架unittest简明使用实例
Apr 13 Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 Python
python中pytest收集用例规则与运行指定用例详解
Jun 27 Python
一文秒懂python读写csv xml json文件各种骚操作
Jul 04 Python
Python编译成.so文件进行加密后调用的实现
Dec 23 Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 Python
Python log模块logging记录打印用法解析
Jan 20 Python
Python Django路径配置实现过程解析
Nov 05 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 echo 和 print 语句
2020/06/30 PHP
List the UTC Time on a Computer
2007/06/11 Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
2015/07/27 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
2020/05/16 Javascript
javaScript实现一个队列的方法
2020/07/14 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
Python读写Excel文件方法介绍
2014/11/22 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
超实用的 30 段 Python 案例
2019/10/10 Python
python实现XML解析的方法解析
2019/11/16 Python
python中p-value的实现方式
2019/12/16 Python
用Python进行websocket接口测试
2020/10/16 Python
预备党员转正思想汇报
2014/01/12 职场文书
认购协议书范本
2014/04/22 职场文书
安全标语口号
2014/06/09 职场文书
南京导游词
2015/02/03 职场文书
教师节班会开场白
2015/06/01 职场文书