python 列表去重(数组)的几种方法

作者:袖梨 2022-11-14

在抓取页面图片时,为避免重复抓取,将抓取的img结果(结果集是list类型的)通过集合去重。这里总结了下网上搜集到的几种方法。

一、方法1

代码如下 复制代码

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

思路看起来比较清晰简单 ,也可以保持之前的排列顺序。

二、方法2

通过set方法进行处理

代码如下 复制代码

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

处理起来比较简单,使用了集合方法set进行处理,不过结果不会保留之前的顺序。

三、方法3

利用lambda匿名函数和 reduce 函数处理

代码如下 复制代码
ids = [1,4,3,3,4,2,3,4,5,6,1]
func = lambda x,y:x if y in x else x + [y]
reduce(func, [[], ] + ids)

四、方法4

使用itertools模块

代码如下 复制代码

import itertools
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

五、无法保持原有顺序

代码如下 复制代码

liebiao=set(liebiao)

六、while遍历去重

代码如下 复制代码

def delRepeat(liebiao):
for x in liebiao:
while liebiao.count(x)>1:
del liebiao[liebiao.index(x)]
return liebiao

七、例子

程序很简单,直接上代码吧:

代码如下 复制代码
#coding=utf-8

def open_txt(): #打开TXT文本写入数组
try:
xxx = file(r'C:\Users\Administrator\Desktop\user.txt', 'r')
for xxx_line in xxx.readlines():
passlist.append(xxx_line)
xxx.close()
except:
return 0

def write_txt(): #打开TXT文本写入数组
try:
yyy = file(r'C:\Users\Administrator\Desktop\list_user.txt', 'w')
for i in list_passwed:
yyy.write(i)
yyy.close()
except:
return 0


global passlist #声明全局变量
passlist = [] #用户名:anonymous 密码为空
open_txt() #TXT导入数组
#passlist = list(set(passlist)) #python 列表去重
global list_passwed #列表去重,不打乱原来的顺序
list_passwed=[]
for i in passlist:
if i not in list_passwed:
list_passwed.append(i)
write_txt()


aside# set方法可以直接去重而且还会排序,如果需要排序的话用set是最快的

相关文章

精彩推荐