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易忽视知识点小结

    Python易忽视知识点小结

    这篇文章主要介绍了Python易忽视知识点,实例分析了Python中容易被忽视的常见操作技巧,需要的朋友可以参考下
    2015-05-05
  • python从入门到精通 windows安装python图文教程

    python从入门到精通 windows安装python图文教程

    这篇文章主要为大家详细介绍了python从入门到精通,windows安装python图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • python连接mongodb数据库操作数据示例

    python连接mongodb数据库操作数据示例

    这篇文章主要介绍了python连接mongodb操作数据示例,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-11-11
  • 如何更改Pycharm配置文件的存放路径

    如何更改Pycharm配置文件的存放路径

    Pycharm配置文件默认是放在C盘的,修改存放位置,这样系统重装的时候就不会不见了,下面这篇文章主要给大家介绍了关于如何更改Pycharm配置文件的存放路径的相关资料,需要的朋友可以参考下
    2022-12-12
  • 深入了解python的函数参数

    深入了解python的函数参数

    这篇文章主要为大家介绍了python的函数参数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • Python利用AI接口实现抠图并改图片底色

    Python利用AI接口实现抠图并改图片底色

    时候我们的证件照需要换底色,又来不及去照相馆拍照,用ps也不好抠图,所以今天给你们分享一下如何用python来抠图,并换底色,需要的可以参考一下
    2022-09-09
  • Python基础教程之pytest参数化详解

    Python基础教程之pytest参数化详解

    参数化就是把测试过程中的数据提取出来,通过参数传递不同的数据来驱动用例运行,这篇文章主要给大家介绍了关于Python基础教程之pytest参数化的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • linux环境中没有网络怎么下载python

    linux环境中没有网络怎么下载python

    在本篇文章里小编给大家分享了关于linux环境中没有网络怎么下载python的相关知识点内容,需要的朋友们参考下。
    2019-07-07
  • Python 的内置字符串方法小结

    Python 的内置字符串方法小结

    本文主要给大家介绍了下Python的一些内置字符串的方法,包括概览,字符串大小写转换,字符串格式输出,字符串搜索定位与替换,字符串的联合与分割,字符串条件判断,字符串编码
    2016-03-03
  • 如何用Python实现RSA加密算法

    如何用Python实现RSA加密算法

    RSA加密算法是一种非对称加密算法,即使用不同的密钥进行加密和解密,下面这篇文章主要给大家介绍了关于如何用Python实现RSA加密算法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06

最新评论