Python对list列表结构中的值进行去重的方法总结

 更新时间:2016年05月07日 18:20:29   投稿:goldensun  
这篇文章主要介绍了Python对列表list中的值进行去重的方法总结,文中给出的方法都能保持去重后的顺序不发生改变,需要的朋友可以参考下

今天遇到一个问题,在同事随意的提示下,用了 itertools.groupby 这个函数。不过这个东西最终还是没用上。
问题就是对一个list中的新闻id进行去重,去重之后要保证顺序不变。
直观方法
最简单的思路就是:

ids = [1,2,3,3,4,2,3,4,5,6,1]
news_ids = []
for id in ids:
  if id not in news_ids:
    news_ids.append(id)

print news_ids

这样也可行,但是看起来不够爽。
用set
另外一个解决方案就是用set:

ids = [1,4,3,3,4,2,3,4,5,6,1]
ids = list(set(ids))

这样的结果是没有保持原来的顺序。
按照索引再次排序
最后通过这种方式解决:

ids = [1,4,3,3,4,2,3,4,5,6,1]
news_ids = list(set(ids))
news_ids.sort(ids.index)

使用itertools.grouby
文章一开始就提到itertools.grouby, 如果不考虑列表顺序的话可用这个:

ids = [1,4,3,3,4,2,3,4,5,6,1]
ids.sort()
it = itertools.groupby(ids)

for k, g in it:
  print k

关于itertools.groupby的原理可以看这里:http://docs.python.org/2/library/itertools.html#itertools.groupby
用reduce
网友reatlk留言给了另外的解决方案。我补充并解释到这里:

In [5]: ids = [1,4,3,3,4,2,3,4,5,6,1]

In [6]: func = lambda x,y:x if y in x else x + [y]

In [7]: reduce(func, [[], ] + ids)
Out[7]: [1, 4, 3, 2, 5, 6]

上面是我在ipython中运行的代码,其中的 lambda x,y:x if y in x else x + [y] 等价于 lambda x,y: y in x and x or x+[y] 。
思路其实就是先把ids变为[[], 1,4,3,......] ,然后在利用reduce的特性。reduce解释参看这里:http://docs.python.org/2/library/functions.html#reduce

相关文章

  • Python黑帽编程 3.4 跨越VLAN详解

    Python黑帽编程 3.4 跨越VLAN详解

    VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理网络障碍,将不同子网中的用户划到同一个VLAN中。这篇文章主要介绍了Python黑帽编程 3.4 跨越VLAN 的相关资料,需要的朋友参考下
    2016-09-09
  • 使用Django和Postgres进行全文搜索的实例代码

    使用Django和Postgres进行全文搜索的实例代码

    这篇文章主要介绍了使用Django和Postgres进行全文搜索,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Python编程二分法实现冒泡算法+快速排序代码示例

    Python编程二分法实现冒泡算法+快速排序代码示例

    这篇文章主要介绍了Python编程二分法实现冒泡算法+快速排序代码示例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • python实现百度OCR图片识别过程解析

    python实现百度OCR图片识别过程解析

    这篇文章主要介绍了python实现百度OCR图片识别过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 举例讲解Python的Tornado框架实现数据可视化的教程

    举例讲解Python的Tornado框架实现数据可视化的教程

    这篇文章主要介绍了举例讲解Python的Tornado框架实现数据可视化的教程,Tornado是一个异步的高人气开发框架,需要的朋友可以参考下
    2015-05-05
  • 配置python的编程环境之Anaconda + VSCode的教程

    配置python的编程环境之Anaconda + VSCode的教程

    这篇文章主要介绍了配置python的编程环境之Anaconda + VSCode的教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Python绘图操作之turtle库乌龟绘图全面整理

    Python绘图操作之turtle库乌龟绘图全面整理

    Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形
    2021-10-10
  • django创建css文件夹的具体方法

    django创建css文件夹的具体方法

    在本文里小编给大家总结的是关于django创建css文件夹的具体方法,对此有需要的朋友们参考下吧。
    2020-07-07
  • Python 管理依赖包工具pip, virtualenv详解

    Python 管理依赖包工具pip, virtualenv详解

    管理依赖包是Python开发中不可或缺的一部分,通过pip、virtualenv和pipenv等工具,我们可以有效地管理包和虚拟环境,确保项目的可移植性和一致性,这篇文章主要介绍了Python 管理依赖包(pip, virtualenv),需要的朋友可以参考下
    2024-07-07
  • 单利模式及python实现方式详解

    单利模式及python实现方式详解

    单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保 某一个类只有一个实例存在.这篇文章主要介绍了单利模式及python实现方式及Python单例模式的4种实现方法,需要的朋友可以参考下
    2018-03-03

最新评论