Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法

 更新时间:2018年03月13日 08:56:11   作者:垄上行  
这篇文章主要介绍了Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法,涉及Python针对列表与字典的元素遍历、判断、去重、排序等相关操作技巧,需要的朋友可以参考下

本文实例讲述了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函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • Python Pandas pandas.read_sql_query函数实例用法分析

    Python Pandas pandas.read_sql_query函数实例用法分析

    在本篇文章里小编给大家整理的是一篇关于Python Pandas pandas.read_sql_query函数实例用法分析内容,有兴趣的朋友们可以跟着学习下。
    2021-06-06
  • TensorFlow进阶学习定制模型和训练算法

    TensorFlow进阶学习定制模型和训练算法

    本文将为你提供关于 TensorFlow 的中级知识,你将学习如何通过子类化构建自定义的神经网络层,以及如何自定义训练算法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • django和vue互传图片并进行处理和展示

    django和vue互传图片并进行处理和展示

    在项目中图片上传并附带几个参数的场景非常常见,如果技术栈是Vue+Django的小伙伴就一定会遇到这个需求,下面这篇文章主要给大家介绍了关于django和vue互传图片并进行处理和展示的相关资料,需要的朋友可以参考下
    2023-05-05
  • Python中定时任务框架APScheduler的快速入门指南

    Python中定时任务框架APScheduler的快速入门指南

    APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便。下面这篇文章主要跟大家介绍了Python中定时任务框架APScheduler的快速入门指南,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • Python安全隐患最新URL解析漏洞防范措施

    Python安全隐患最新URL解析漏洞防范措施

    这篇文章主要为大家介绍了Python安全隐患,最新URL解析漏洞的防范措施,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • python安装cxOracle避坑总结不要直接pip install

    python安装cxOracle避坑总结不要直接pip install

    这篇文章主要为大家介绍了python安装cx_Oracle是遇到的一些问题的解决办法的总结,来帮大家避避坑有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步
    2021-10-10
  • django中row语法详解

    django中row语法详解

    在Django模板中,使用{{ row }}语法可以输出列表row的所有元素,但是如果你想要输出列表中的某个元素,需要使用下标来访问它,这篇文章主要介绍了django中row语法详解,需要的朋友可以参考下
    2023-06-06
  • python实现定时提取实时日志程序

    python实现定时提取实时日志程序

    这篇文章主要为大家详细介绍了python实现定时提取实时日志程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • python图片指定区域替换img.paste函数的使用

    python图片指定区域替换img.paste函数的使用

    这篇文章主要介绍了python图片指定区域替换img.paste函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python求算数平方根和约数的方法汇总

    Python求算数平方根和约数的方法汇总

    这篇文章主要介绍了 Python求算数平方根和约数的方法汇总的相关资料,需要的朋友可以参考下
    2016-03-03

最新评论