iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python set()去重的方法是什么
  • 826
分享到

python set()去重的方法是什么

2023-06-26 04:06:59 826人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍了python set()去重的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python set()去重的方法是什么文章都会有所收获,下面我们一起来看看吧。set

这篇文章主要介绍了python set()去重的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python set()去重的方法是什么文章都会有所收获,下面我们一起来看看吧。

set是什么?

数学上,把set称做由不同的元素组成的集合,集合(set)的成员通常被称做集合元素(set elements)。Python把这个概念引入到它的集合类型对象里。集合对象是一组无序排列的可哈希的值。集合关系测试和uNIOn、intersection等操作符在Python里也同样如我们所预想地那样工作。

set特点

集合的元素有三个特征:

确定性:集合中的元素必须是确定的;

互异性:集合中的元素互不相同,如:集合A={1,a},则a不能等于1);

无序性:集合中的元素没有先后之分,如:{3,4,5}和{3,5,4}算作同一个集合。

python中集合(set)是一个无序不重复元素的集,基本功能包括关系测试和消除重复元素,还可以计算交集、差集、并集等,它与列表(list)的行为类似,区别在于set不同包括重复的值,而且set元素是无序的。

在python中可以用大括号 {} 创建集合。注意:如果要创建或初始化一个空集合,你必须用 set() 而不是 {} 。因为后者{} 作为创建一个空的字典,以后我们会介绍字典这种数据结构

一、set去重简单实例

ls = [1,2,3,1,2]print(set(ls))

python set()去重的方法是什么

我们知道对于一个列表最简单的去重方法就是直接调用set函数,利用集合元素的唯一性,就可以做到去重。但是,这个底层原理究竟是什么样的却一直半解。

且看下面剖析

二、重新set实现机制

class Foo:    def __init__(self,name,count):        self.name = name        self.count = count    def __hash__(self):        print("%s调用了哈希方法"%self.name)        return hash(id(self))    def __eq__(self, other):        print("%s调用了eq方法")        if self.__dict__ == other.__dict__:            return True        else:return Falsef1 = Foo('f1',1)f2 = Foo('f2',2)f3 = Foo('f3',3)ls = [f1,f2,f3]print(set(ls))

python set()去重的方法是什么

从上面可以看出,set方法就是去调用hash方法,然后根据哈希值一不一样就行去重判断,但是事实就是样吗?且看下面程序。

class Foo:    def __init__(self,name,count):        self.name = name        self.count = count    def __hash__(self):        print("%s调用了哈希方法"%self.name)        return hash(self.count)    def __eq__(self, other):        print("%s调用了eq方法"%self.name)        return self.__dict__ == other.__dict__f1 = Foo('f1',1)f2 = Foo('f2',1)f3 = Foo('f3',3)ls = [f1,f2,f3]print(set(ls))

python set()去重的方法是什么

我看可以看出,实际上f1,f3的哈希值是相等的,但是set并没有这么简单就判断f1,f3是重复的,而是进一步通过eq方法判断这两个值是否相等,只有相等时才会认为这两个之间实际上是同一个。为了验证上面的说法,我们来看看下面的代码。

f1 = Foo('f1',1)f2 = Foo('f1',1)f3 = Foo('f3',3)ls = [f1,f2,f3]print(set(ls))

python set()去重的方法是什么

可以看出去重后,只有两个元素,所以上面说法得证。

三、结论

set的去重是通过两个函数__hash__和__eq__结合实现的。
1、当两个变量的哈希值不相同时,就认为这两个变量是不同的
2、当两个变量哈希值一样时,调用__eq__方法,当返回值为True时认为这两个变量是同一个,应该去除一个。返回FALSE时,不去重

四、应用场景需求

有一个公司,现有100个员工,由于数据库不完善,使用时间比较长,里面有很多重复数据需要清除。具体需求如下:

每个员工的属性有:姓名,性别,年龄,部门。 由于年龄和部门都会发生变化,所以现在认为只要两个员工之间姓名和性别一样,就认为是同一个人。

请实现员工去重:

class Staff:    def __init__(self,name,gender,age,department):        self.name = name        self.gender = gender        self.age  = age        self.department = department    def __hash__(self):        return hash(self.name+self.gender)    def __eq__(self, other):        return Truels = ['zs','ls','ww','zq']gender_list = ['man','femal']staff_list = []for i in range(100):    staff_list.append(Staff(ls[i%4],gender_list[i%2],i,'class'))print(set(staff_list))print([(i.name,i.gender) for i in set(staff_list)])

关于“python set()去重的方法是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“python set()去重的方法是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网Python频道。

--结束END--

本文标题: python set()去重的方法是什么

本文链接: https://www.lsjlt.com/news/306670.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python set()去重的方法是什么
    这篇文章主要介绍了python set()去重的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python set()去重的方法是什么文章都会有所收获,下面我们一起来看看吧。set...
    99+
    2023-06-26
  • javascript利用set进行数组去重的方法是什么
    这篇文章主要介绍“javascript利用set进行数组去重的方法是什么”,在日常操作中,相信很多人在javascript利用set进行数组去重的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用...
    99+
    2022-10-19
  • python去除重复数据的方法是什么
    Python中去除重复数据的方法有多种,下面是其中两种常见的方法:1. 使用集合(set)去除重复数据:将数据转换为集合类型,集合具...
    99+
    2023-08-09
    python
  • java数组去重的方法是什么
    Java数组去重的方法有多种,以下是常见的几种方法: 使用Set:将数组元素存入Set集合中,由于Set集合不允许重复元素,重复的...
    99+
    2023-10-26
    java
  • golang排序去重的方法是什么
    在Go语言中,可以使用sort和slice的特性来进行排序和去重。 排序方法: 使用sort包中的sort.Slice()函数来对...
    99+
    2023-10-27
    golang
  • Java数组的去重方法是什么
    这篇文章主要讲解了“Java数组的去重方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java数组的去重方法是什么”吧!数组去重的场景将数组var arr =[1,1,‘true&#...
    99+
    2023-06-25
  • php大数据去重的方法是什么
    PHP大数据去重的方法有多种,以下是一些常用的方法:1. 使用数组去重:将数据存储到一个数组中,利用数组的键唯一性来实现去重。例如:...
    99+
    2023-09-23
    php
  • sql中去重查询的方法是什么
    在SQL中,可以使用DISTINCT关键字来进行去重查询。DISTINCT关键字用于删除SELECT语句返回结果中重复的行。...
    99+
    2023-09-16
    sql
  • mysql多字段去重的方法是什么
    MySQL中多字段去重的方法可以使用GROUP BY语句来实现。具体步骤如下:1. 使用SELECT语句选择需要去重的字段,...
    99+
    2023-08-30
    mysql
  • distinct去重多个字段的方法是什么
    要去重多个字段,可以使用GROUP BY子句。在GROUP BY子句中,你可以指定多个字段,以便按照这些字段的组合进行分组。然后,使...
    99+
    2023-08-14
    distinct
  • 数据库查询去重的方法是什么
    数据库查询去重的方法有以下几种:1. 使用DISTINCT关键字:在SELECT语句中使用DISTINCT关键字可以去除查询...
    99+
    2023-09-23
    数据库
  • js六种数组去重的方法是什么
    这篇文章主要介绍了js六种数组去重的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇js六种数组去重的方法是什么文章都会有所收获,下面我们一起来看看吧。 第一种 ne...
    99+
    2022-10-19
  • JavaScript数组去重的五种方法是什么
    本篇内容介绍了“JavaScript数组去重的五种方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-19
  • mysql多个字段去重的方法是什么
    在MySQL中,可以使用DISTINCT关键字来去重多个字段。例如,假设有一个名为table_name的表,包含字段column1和...
    99+
    2023-10-23
    mysql
  • 易语言数组去重的方法是什么
    易语言中可以使用循环和条件判断来实现数组去重的方法,具体步骤如下:1. 定义一个新的空数组,用于存放去重后的元素。2. 使用循环遍历...
    99+
    2023-08-17
    易语言
  • sql多个字段去重的方法是什么
    SQL中可以使用DISTINCT关键字来去重多个字段。DISTINCT关键字用于返回唯一不重复的字段值。例如,假设有一个名为user...
    99+
    2023-08-14
    sql
  • access查询去除重复项的方法是什么
    在Access中,可以使用DISTINCT关键字或GROUP BY子句来去除重复项。1. 使用DISTINCT关键字:在SELEC&...
    99+
    2023-10-11
    access
  • ThreadLocal的set方法原理是什么
    这篇文章主要介绍了ThreadLocal的set方法原理是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ThreadLocal的set方法原理是什么文章都会有所收获,下面我们一起来看看吧。前沿知识Threa...
    99+
    2023-07-05
  • c++ set遍历的方法是什么
    在C++中,可以使用迭代器或者范围循环来遍历Set。1. 使用迭代器遍历Set:```cpp#include #include in...
    99+
    2023-09-15
    c++
  • oracle去重展示全部字段的方法是什么
    Oracle中展示所有字段并去重的方法可以使用DISTINCT关键字。该关键字用于查询时去除结果集中的重复记录。下面是一个示例查询,...
    99+
    2023-08-15
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作