`
heipark
  • 浏览: 2078276 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python中set集合如何决定是否重复?

阅读更多

看下面代码,两个值相同的Item对象,添加到set中被认为是两个对象。

 

class Item(object):

    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar
    
    def __repr__(self):
        return "Item(%s, %s)" % (self.foo, self.bar)
    
print set([Item('1', '2'), Item('1', '2')])

# 输出: set([Item(1, 2), Item(1, 2)])

 

数据结构中HASH表的设计思路是:

  1. 被插入元素根据hash值决定插入那个桶(通常一个数组)中
  2. 新插入元素根据的equals方法依次比较桶内元素,以确定是否已经存在

 

在python中如果我们自定义class,则需要添加__hash____eq__两个方法,前者用于决定当前元素在哪个桶,后者决定当前元素是否在桶中已经存在。

 

修改后的code如下:

 

class Item(object):
    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar
    
    def __repr__(self):
        return "Item(%s, %s)" % (self.foo, self.bar)
    
    def __eq__(self, other):
        if isinstance(other, Item):
            return ((self.foo == other.foo) and (self.bar == other.bar))
        else:
            return False
    
    def __hash__(self):
        return hash(self.foo + " " + self.bar)

print set([Item('1', '2'), Item('1', '2')])

# 输出:set([Item(1, 2)])
 

OK了.

 

P.S. 我在SQLAlchemy使用model过程发现,model添加到set后会做distinct动作,why?是因为持久化类的父类Model中以及实现了上面两个方法,它们默认通过主键来判断元素是不是一个。

 

 

--heipark

分享到:
评论

相关推荐

    set集合判断集合中是否有无元素-Python入门教程笔记(五)集合(set)及函数.pdf

    set集合判断集合中是否有⽆元素_Python⼊门教程笔记(五) 集合(set)及函数 三九、什么是 三九、什么是set 在前⾯,我们学习了dict,知道dict的key是不重复的,当我们往dict⾥添加⼀个相同key的value时,新的value...

    Python语言基础:set集合运用.pptx

    set集合是一个元素无序不重复的序列,可以使用大括号{}或set()函数创建集合。 语法格式: parame={value01,value02,………} 或 set(value) 实例:创建set集合。 #第一种创建set集合 basket={"apple","orange","pear...

    测量程序编制 - python 44数据类型:Set(集合)-概述.pptx

    Set(集合)——概述Set(集合)Python 中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。从形式上看,和字典类似,Python 集合会将所有元素放在一对大括号 {} 中,...

    python set集合使用方法解析

    这篇文章主要介绍了python set集合使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 定义 定义:在{}中用逗号隔开,集合具备以下3个特点: 1.每个...

    Python程序基础:字典和集合综合案例.pptx

    集合(set)与数学中集合的概念一致,即包含0个或多个数据项的无序组合。 集合中的元素不可重复 元素??型只能是固定数据类型,如整数、浮点数、字符串、元组等 不能是列表、字典和集合等可变数据类型;创建集合的方式...

    python-集合使用场景.docx

    例如,我们有一个列表,其中包含重复的元素: ``` lst = [1, 2, 3, 4, 1, 2, 5, 6, 3, 4] ``` 我们可以使用集合来去重: ``` s = set(lst) ``` 这将创建一个集合,其中包含不重复的元素: python-集合使用场景全文共...

    测量程序编制 - python 49数据类型:Set(集合)-并集.pptx

    即包含了所有集合的元素,重复的元素只会出现一次语法: set.union(set1, set2...)set1 -- 必需,要查找相同元素的集合set2 -- 可选,可以是任何序列,可以多个,多个使用逗号 , 隔开 若是字典,按键比较返回值:...

    测量程序编制 - python 52数据类型:Set(集合)-函数.pptx

    Set(集合)——函数 Set(集合)——函数 序号 方法 描述 1 add() 为集合添加元素 2 clear() 移除集合中的所有元素 ...返回两个集合中不重复的元素集合。 15 symmetric_difference_update() 移除当前

    测量程序编制 - python 51数据类型:Set(集合)-对称差集.pptx

    2) symmetric_difference()方法:返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素 语法: set. symmetric_difference(set1, set2 ... etc) set1 -- 必需,要查找相同元素的集合,可以是任何序列 ...

    python中set()函数简介及实例解析

    set函数也是python内置函数的其中一个,属于比较基础的函数。其具体介绍和使用方法,下面进行介绍。...使用add(key)往集合中添加元素,重复的元素自动过滤 list1=[1,2,3,4] s=set(list1) print(s) s.add(4) s.ad

    Python中set与frozenset方法和区别详解

    set(可变集合)与frozenset(不可变集合)的区别: set无序排序且不重复,是可变的,有add(),remove()等方法。既然是可变的,所以它不存在哈希值。基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合)...

    Python程序设计:集合的概念与创建.pptx

    集合(set)是一些不重复元素的无序组合,对集合可以进行交集、并集、差集等运算。集合分为可变集合和不可变集合。 集合的概念与创建 创建集合 集合分为可变集合和不可变集合,对于可变集合可以添加和删除集合元素,...

    Python程序设计:集合的方法.pptx

    在集合set1中添加元素x set1.clear() 删除集合set1中的所有元素 set1.copy() 获取集合set1的一个副本 set1.difference() 返回多个集合的差集 set1.difference_update() 移除集合中的元素,该元素在指定的集合也存在 ...

    python中的四种集合数据类型(列表,元组,集合,字典)

    python中的四种集合数据类型是: 列表(List):有序,可更改,可以有重复的成员 元组(tuple):有序,不可更改,可以有重复的成员 集合(set):无序,无索引,没有重复的成员。 字典 (Dictionary):无序,可...

    python中的集合 (set) 的创建和使用

    集合(set)是一个无序的不重复元素序列。集合和列表非常相似 集合和列表的不同点: 集合中只能存储不可变对象 集合中存储的对象是无序(不是按照元素的插入顺序保存) 集合中不能也不会出现重复的元素 创建集合: ...

    零基础入门python3.7 ——基础知识总结(七)集合(set)

    python中的集合和数学中的集合是一样的,用来保存不重复的元素。也就是说集合中的元素是唯一的。 二。创建集合 1。 使用{}创建 a = {1, 3, "java", 'python'} print(a) {1, 3, 'java', 'python'} 2。使用set()函数...

    Python set常用操作函数集锦

    set是一个无序且不重复的元素集合。 集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数(大小), 用 for 循环迭代集合的成员。...

    Python数据类型之Set集合实例详解

    本文实例讲述了Python数据类型之Set集合。分享给大家供大家参考,具体如下: set集合 1.概述 set与dict类似,但set是一组key的集合,与dict的区别在于set不存储value。 本质:无序且无重复元素的集合(具有自动去重...

    彻底搞懂Python集合

    集合(set)属于Python无序可变序列,使用一对大括号作为定界符,元素之间使用逗号分隔,同一个集合内的每个元素都是唯一的,元素之间不允许重复。 集合中只能包含数字、字符串、元组等不可变类型(或者说可哈希)的...

    python学习笔记——集合与字典

    python中提供了一种同名的具体数据类型——集合(set) 由于集合是无序组合,他没有索引和位置的概念,不能分片,集合中元素可以动态增加或删除。 集合用大括号表示,可以用赋值语句生成一个集合,例如: >>>

Global site tag (gtag.js) - Google Analytics