python中对list去重的多种方法
2023-06-13 09:15:46 时间
今天遇到一个问题,在同事随意的提示下,用了itertools.groupby这个函数。不过这个东西最终还是没用上。
问题就是对一个list中的新闻id进行去重,去重之后要保证顺序不变。
直观方法
最简单的思路就是:
ids=[1,2,3,3,4,2,3,4,5,6,1]
news_ids=[]
foridinids:
ifidnotinnews_ids:
news_ids.append(id)
printnews_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)
fork,ginit:
printk
关于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=lambdax,y:xifyinxelsex+[y]
In[7]:reduce(func,[[],]+ids)
Out[7]:[1,4,3,2,5,6]
上面是我在ipython中运行的代码,其中的lambdax,y:xifyinxelsex+[y]等价于lambdax,y:yinxandxorx+[y]。
思路其实就是先把ids变为[[],1,4,3,......],然后在利用reduce的特性。reduce解释参看这里:http://docs.python.org/2/library/functions.html#reduce
相关文章
- python-列表(list)使用方法
- python socket recvfrom_Python:socket.recvfrom()不返回任何地址
- Python: list列表的内置方法介绍
- Python 合并list 11种方式
- python win32api sendmessage_Python win32api.SendMessage方法代码示例[通俗易懂]
- 数据结构与算法Python_数据结构与算法python语言实现
- python deepcopy函数_Python deepcopy
- python数据可视化从入门到实战_大数据可视化概念
- python爬虫中Session 和 cookie的使用
- Python获取彩票信息(一)
- 新手学Python可行吗?需要什么基础?(新手学python可行吗?需要什么基础)
- python-Python与PostgreSQL数据库-PostgreSQL数据库的基本知识(二)
- Linux查看Python安装路径的方法(linux查看python安装路径)
- Connecting to MSSQL with Python: A Comprehensive Guide for Beginners(python连接mssql)
- 高德API+Python帮你解决租房问题
- Linux下的Python开发技术之旅(linux下python开发)
- 使用Redis集合和List实现高效存储(redis集合和list)
- python编程-将Python程序转化为可执行程序[整理]
- Python中字典(dict)和列表(list)的排序方法实例
- python中List的sort方法指南