Python对list列表结构中的值进行去重的方法总结
作者:goldensun 发布时间:2021-10-18 04:09:04
标签:Python,列表,去重
今天遇到一个问题,在同事随意的提示下,用了 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


猜你喜欢
- 本文实例为大家分享了js全选操作的具体代码,供大家参考,具体内容如下<html><head><meta htt
- Mac本地环境搭建在Mac系统,我们可以使用MAMP Pro (官方网站:https://www.mamp.info/en/)软件来搭建本地
- 概述os.access() 方法使用当前的uid/gid尝试访问路径。大部分操作使用有效的 uid/gid, 因此运行环境可以在 suid/
- 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。生产环境
- Python传入参数的方法有:位置参数、默认参数、可变参数、关键字参数、和命名关键字参数、以及各种参数调用的组合写在前面Python唯一支持
- 目录Django 和 MongoDB 设置安装:创建:激活:使用 PyMongo 连接 Django 和 MongoDB使用 MongoEn
- 1. 目标通过hadoop hive或spark等数据计算框架完成数据清洗后的数据在HDFS上爬虫和机器学习在Python中容易实现在Lin
- 一、优先级队列介绍我们知道,普通的队列插入一个元素,数据会被放在后端,并且需要前面所有的元素都处理完成后才会处理前面的数据。但是优先级队列,
- 在做NLP(自然语言处理)相关任务时,经常会遇到需要识别并提取省、城市、行政区的需求。虽然我们自己通过关键词表一个个查找也能实现提取目的,但
- 1、什么是全局变量?在Python中,全局变量指的是可以作用于函数内部和外部的变量。在这里有两种情况:在函数的外部定义和内部定义添加glob
- DEMO:var testobj = document.getElementById("test&q
- 间类型:尽量使用TIMESTAMP类型,因为其存储空间只需要 DATETIME 类型的一半。对于只需要精确到某一天的数据类型,建议使用DAT
- 前言如果电脑是第一次安装MySQL,一般不会出现这样的报错。如下图所示。starting the server失败,通常是因为上次安装的该软
- 主要功能在copyFiles()函数里实现,如下:def copyFiles(src, dst): sr
- 一、Python下载1.进入Python官网:https://www.python.org/2.选择windows版本(Download &
- Javascript 中将多个语句写成一个语句的两种方法小结一、使用逗号运算符将多个语句写成一个语句 1.一次声明多个变量&nb
- 字典什么是字典说到字典,第一时间想到的应该就是新华字典,实际上,这跟编程中的字典类似,两者都有一个特点,就是一一对应(yi yi dui y
- 我们在开发过程中,经常需要针对一列,基于条件逻辑来返回一个值,那么,这时候就需要使用到CASE表达式了。例如,以下对Products表的查询
- Matplotlib 制作Matplotlib 作为 Python 家族最为重要的可视化工具,其基本的 API 以及绘制流程还是需要掌握的。
- PDO是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php