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中的atexit模块
Mar 07 Python
Python单体模式的几种常见实现方法详解
Jul 28 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
Python对数据进行插值和下采样的方法
Jul 03 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
Python3中编码与解码之Unicode与bytes的讲解
Feb 28 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
Oct 24 Python
opencv python在视屏上截图功能的实现
Mar 05 Python
解决python中import文件夹下面py文件报错问题
Jun 01 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
解决python3中os.popen()出错的问题
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
php magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
Python实现删除Android工程中的冗余字符串
2015/01/19 Python
python的random模块及加权随机算法的python实现方法
2017/01/04 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
详解Python之unittest单元测试代码
2018/01/24 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
django解决跨域请求的问题详解
2019/01/20 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
PyQt5 多窗口连接实例
2019/06/19 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
python实现opencv+scoket网络实时图传
2020/03/20 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
奥巴马演讲稿
2014/01/08 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
2014最新实习证明模板
2014/10/02 职场文书
介绍信格式
2015/01/30 职场文书
综合素质评价思想道德自我评价
2015/03/09 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电