首页 > 其他分享 >列表去重

列表去重

时间:2024-08-17 22:15:26浏览次数:11  
标签:Counter list 列表 result print pandas

  列表去重方法有很多,主要方法如下:

1. set去重

#方法1. set 去重
list01=[1,1,0,0,1,2,2,4,3,3,3]
result_list=list(set(list01))
print(result_list)#[0, 1, 2, 3, 4]

  优点:简单高效,代码量少,性能好。
  缺点:可能会改变原始数据的顺序。

2. 列表推导式

#方法2.列表推导式
list02=[1,1,0,0,1,2,2,4,3,3,3]
result_list2 = []
[result_list2.append(x) for x in list02 if x not in result_list2]
print(result_list2)#[1, 0, 2, 4, 3]

  优点:保留了原始顺序
  缺点:效率较低,尤其是列表很大的时候。时间复杂度是 O(n^2)

3. collections.Counter

#方法3.用 collections.Counter
from collections import Counter
list03=[1,1,0,0,1,2,2,4,3,3,3]
# print("Counter(list03)",Counter(list03))#Counter({1: 3, 3: 3, 0: 2, 2: 2, 4: 1})
result_list3=list(Counter(list03).keys())
print(result_list3)#[1, 0, 2, 4, 3]

  优点:保留原始顺序,效率高,一行代码搞定。
  缺点:需要引入 collections 模块,不过这个模块是标准库的一部分,不用担心额外安装问题.

4. dict.fromkeys

#方法4:用 dict.fromkeys #Python 3.7+中,字典是有序的
list04=[1,1,0,0,1,2,2,4,3,3,3]
result_list4=list(dict.fromkeys(list04))
print(result_list4)#[1, 0, 2, 4, 3]

  优点:保留原始顺序,效率高。
  缺点:可能不太直观,需要知道字典有序的特性。

5. pandas.unique(list).tolist()

#方法5:用pandas
import pandas as pd
list05=[1,1,0,0,1,2,2,4,3,3,3]
result_list5=pd.unique(list05).tolist()
print(result_list5)#[1, 0, 2, 4, 3]

  优点:保留原始顺序,代码简洁。
  缺点:需要引入 pandas 库,适合已经在使用 pandas 的场景。

6. numpy.unique(list).tolist()

#方法6:用numpy
import numpy as np
list06=[1,1,0,0,1,2,2,4,3,3,3]
result_list6=np.unique(list06).tolist()
print(result_list6)#[0, 1, 2, 3, 4]

  优点:代码简洁,适合数值计算
  缺点:需要引入 numpy 库,适合已经在使用 numpy 的场景,可能会改变原始数据的顺序

7. itertools.groupby

#方法7:itertools.groupby
from itertools import groupby
list07=[1,1,0,0,1,2,2,4,3,3,3]
sorted_list = sorted(list07)
result_list7 = [key for key, _ in groupby(sorted_list)]
print(result_list7)#[0, 1, 2, 3, 4]

  优点:适用于排序后的数据,性能较好。
  缺点:
排序的时间复杂度为 O(n log n),不适用于无序列表与大列表

8. pandas.Series(list).drop_duplicates().tolist()

#方法8:pandas.Series(list).drop_duplicates().tolist()
import pandas as pd
list08 = [1,1,0,0,1,2,2,4,3,3,3]
result_list8 = pd.Series(list08).drop_duplicates().tolist()
print(result_list8)#[1, 0, 2, 4, 3]

  优点:  代码简洁,易于理解和实现。适用于无序的数据列表,不需要排序。
  缺点:需要导入 pandas 库,可能增加额外的依赖。对非常大的列表可能性能较差。

 

小结: 需要保留原始顺序或不关心顺序推荐使用collections.Counter,既不需要安装新的模块,而且高效。

标签:Counter,list,列表,result,print,pandas
From: https://www.cnblogs.com/wancy/p/18365058

相关文章

  • 置顶博客列表
    为精简首页置顶博客的数量,将需要置顶博客列出如下:1、[原创控件]为lazarusTDataSet增加类似TClientDataSet的Delta功能,可直接生成增删改的SQL(2024-08-17增加blob类型转base64)1、为lazarusTDataSet增加类似TClientDataSet的Delta功能,可直接生成增删改的SQL2、[原创控件]QFCompon......
  • C#文件列表
    C#文件列表窗体页面制作需要控件Panel,设置属性Dock控制所处的位置。用于在窗体上分组和组织其他控件。在Pannel里拖入Lable,Button,TextBox,Listview,FolderBrowerDialog,ContexMenuStrip,ImageList等控件。ListView:可以平铺的布局,用于以多种视图模式(如大图标、小图标、列表、详细......
  • PbootCMS对内容列表进行筛选
    适用范围:内容列表页使用,其实也可以用在首页等标签作用:用于对内容列表进行筛选1、使用步骤1)到后台对模型添加扩展字段,字段类型选择单选或多选,同时填写单选或多选的可选内容;2)添加对应模型的栏目,并对栏目添加内容;3)到前台模板中调用相关扩展字段进行输出,具体见下面的例子。2、......
  • PbootCMS用于远程调取系统数据API接口列表
    标签作用:用于远程调取系统数据。使用说明1)请先到后台进行API相关参数配置,强烈建议启用强制认证;2)客户端发起请求必须包含appid(认证用户)、timestamp(时间戳)、signature(签名)三个参数3)签名参数signature通过appid、secret、timestamp三个值连接为一个字符串,然后进行双层md5加密生......
  • PbootCMS用于调导航菜单栏目列表,对应后台的“基础内容>内容栏目”
    适用范围:全站任意地方均可使用标签作用:用于调导航菜单栏目列表,对应后台的“基础内容>内容栏目”教程新增加pbootcms导航栏logo居中判断案例1、导航菜单列表{pboot:nav}<ahref="[nav:link]">[nav:name]</a>{/pboot:nav}控制参数:num=*数量,非必填,用于控制输出的数量parent=......
  • C#winform制作学生列表
    学生列表记录学习制作学生列表的过程。准备数据源​ 建一个实体类,设置数据源的类型。可以新建一个文件夹Model,在它下面建一个Student.cs实体类。Student.csnamespace_1.窗体.Model{//实体类:实体本质对现实的描述,映射ORM(ObjectRelationMapping)//POCOp......
  • (路由卷1)-36-路由控制及分发列表
    实验:r1:intlo0ipadd1.1.1.1255.255.255.0ints1/0noshipadd12.1.1.1255.255.255.0routereigrp100noaunet12.0.0.0net1.0.0.0r2:ints1/0noshipadd12.1.1.2255.255.255.0intlo0ipadd2.2.2.2255.255.255.0ints1/1ipadd23.1.1.2255.2......
  • (路由卷1)-37-前缀列表_K1_IGP分析
    ipprefix前缀列表r2:routerospf1network10.0.0.8area0redistributeriproute-mapintoospfsubnetsrouterripnet10.0.0.0ver2passive-inters3redistributeospf1route-mapintoripmetric5route-mapintoospfpermit10matchipaddressprefix-listpf......
  • 易优adv功能:获取广告列表内容-Eyoucms标签手册
    【基础用法】名称:adv功能:获取广告列表内容。语法:{eyou:advpid='1'row='3'}<ahref='{$field.links}'><imgalt='{$field.title}'src='{$field.litpic}'/></a>{/eyou:adv}参数:pid=''广告位置IDrow=�......
  • 易优Attribute栏目属性列表-Eyoucms标签手册
    attribute栏目属性列表[基础用法]名称:attribute功能:获取栏目的属性列表,或者单独获取某个属性值。语法:{eyou:attributetype='auto'}{$attr.name}:{$attr.value}{/eyou:attribute}参数:aid=''文档ID,在arclist标签、list标签之内,以及内容页模板中一般不需要指定a......