zoukankan      html  css  js  c++  java
  • Python集合的方法

    Python 中的集合类似于数学中的集合概念,它是一组无序、不可重复数据的组合。集合用{ ...}创建,某种程度上可以把集合看作是没有值的字典。集合是Python里面非常重要的数据类型,其中的方法总共有17个,数量掌握这些方法,对数据的处理效率会大大提高,特别是在计算字符串长度,交集并集等,非常有用现在分享给大家。

    #获取集合的所有方法print(dir(set()))[..., 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']

    01、add()

    描述:add() 方法用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。注意:集合中只能包含可哈希的对象,即 list,dict 都不能嵌入到集合

    语法:set.add(elmnt)

    参数:elmnt -- 必需,要添加的元素。

    添加不存在的元素set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合set1.add('罗玉凤')#给他加个凤姐进去set1{'Makiyo', 'Selina', '周扬青', '徐怀钰', '罗玉凤'}
    set1.add('乔碧萝')#再给罗志祥加个乔碧萝set1{'Makiyo', 'Selina', '乔碧萝', '周扬青', '徐怀钰', '罗玉凤'}
    #添加存在的元素set1.add('徐怀钰')set1{'Makiyo', 'Selina', '乔碧萝', '周扬青', '罗玉凤'}#我们发现,还是只有五个
    
    
    

    02、clear()

    描述:clear() 方法用于移除集合中的所有元素。

    语法:set.clear()

    参数:无。

    set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合set1.clear()#一下全部清除了set1set()#返回一个空集合
    
    
    

    03、copy()

    描述:copy() 方法用于复制一个集合,会重新生成一个

    语法:set.copy()

    参数:无

    set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合set2 = set1.copy()#直接复制产生一个新的集合,要多少有多少set2{'Makiyo', 'Selina', '周扬青', '徐怀钰'}
    
    

    04、difference()

    描述:difference() 方法用于返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中。也可以用set1 - set2 进行差运算,set1 减去 set1&set2 部分

    语法:set.difference(set)

    参数:set -- 必需,用于计算差集的集合

    set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合set2 = {'周扬青','徐怀钰','罗玉凤','乔碧萝'}#再建一个罗志祥的女友集合
    set1.difference(set2){'Makiyo', 'Selina'}
    
    

    05、difference_update()

    描述:difference_update() 方法用于移除两个集合中都存在的元素difference_update() 方法与 difference() 方法的区别在于 difference() 方法返回一个移除相同元素的新集合,而 difference_update() 方法是直接在原来的集合中移除元素,没有返回值。

    语法:set.difference_update(set)

    参数:set -- 必需,用于计算差集的集合

    set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合set2 = {'周扬青','徐怀钰','罗玉凤','乔碧萝'}#再建一个罗志祥的女友集合set1.difference_update(set2)#无返回值print(set1){'Makiyo', 'Selina'}
    
    
    

    06、discard()

    描述:discard() 方法用于移除指定的集合元素。该方法不同于 remove() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。

    语法:set.discard(value)

    参数:value -- 必需,要移除的元素

    #构建一个罗志祥历任女友的集合set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#现在我们拿走一个看看set1.discard('徐怀钰')set1{'Makiyo', 'Selina', '周扬青'}#人家还剩3个,真是
    #再拿走一个集合里面没有的,发现并没有报错set1.discard('女助理')set1{'Makiyo', 'Selina', '周扬青'}
    #用remove方法试试,发现就报错了set1.remove('女助理')KeyError: '女助理'
    
    
    

    07、intersection()

    描述:intersection() 方法用于返回两个或更多集合中都包含的元素,即交集。set1 & set2 #交运算

    语法:set.intersection(set1, set2 ...etc)

    参数:

    • set1 -- 必需,要查找相同元素的集合

    • set2 -- 可选,其他要查找相同元素的集合,可以多个,多个使用逗号 , 

    #两个集合取交集set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合set2 = {'周扬青','徐怀钰','罗玉凤','乔碧萝'}#再建一个罗志祥的女友集合set1.intersection(set2) {'周扬青', '徐怀钰'}
    #多个集合取交集x = {"a", "b", "c"}y = {"c", "d", "e"}z = {"f", "g", "c"}result = x.intersection(y, z)print(result){'c'}
    
    

    08、intersection_update()

    描述:intersection_update() 方法用于获取两个或更多集合中都重叠的元素,即计算交集。intersection_update() 方法不同于 intersection() 方法,因为 intersection() 方法是返回一个新的集合,而 intersection_update() 方法是在原始的集合上移除不重叠的元素。

    语法:set.intersection_update(set1,set2 ...etc)

    参数:

    • set1 -- 必需,要查找相同元素的集合

    • set2 -- 可选,其他要查找相同元素的集合,可以多个,多个使用逗号 , 隔开

    set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合set2 = {'周扬青','徐怀钰','罗玉凤','乔碧萝'}#再建一个罗志祥的女友集合
    set1.intersection_update(set2)
    print(set1){'周扬青', '徐怀钰'}

    09、isdisjoint()

    描述:isdisjoint() 方法用于判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。

    语法:set.isdisjoint(set)

    参数:set -- 必需,要比较的集合

    x = {"apple", "banana", "cherry"}y = {"google", "runoob", "facebook"}z = x.isdisjoint(y)print(z)True


    10、issubset()

    描述:issubset() 判断 set1 是否是 set2 的子集,如果是则返回 True,否则返回 False。

    语法:set.issubset(set)

    参数:set -- 必需,要比查找的集合

    x = {"a", "b", "c"}y = {"f", "e", "d", "c", "b", "a"}z = x.issubset(y)print(z)True
    x = {"a", "b", "c"}y = {"f", "e", "d", "c", "b"}z = x.issubset(y)print(z)False
    
    
    

    11、issuperset()

    描述:issuperset() 方法用于判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False。

    语法:set.issuperset(set)

    参数:set -- 必需,要比查找的集合

    x = {"f", "e", "d", "c", "b", "a"}y = {"a", "b", "c"}z = x.issuperset(y)print(z)True
    x = {"f", "e", "d", "c", "b"}y = {"a", "b", "c"}z = x.issuperset(y)print(z)False
    
    

    12、pop()

    描述:pop() 方法用于随机移除一个元素。

    语法:set.pop()

    参数:

    set1 = {'周扬青','徐怀钰','Makiyo','Selina'}set1.pop()'徐怀钰'
    set1 {'Makiyo', 'Selina', '周扬青'}
    
    

    13、remove()

    描述:remove() 方法用于移除集合中的指定元素。该方法不同于 discard() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。

    语法:set.remove(item)

    参数:item -- 要移除的元素

    #构建一个罗志祥历任女友的集合set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#现在我们拿走一个看看set1.remove('徐怀钰')set1{'Makiyo', 'Selina', '周扬青'}#人家还剩3个,真是
    #再拿走一个集合里面没有的,发现并没有报错set1.discard('女助理')set1{'Makiyo', 'Selina', '周扬青'}
    #用remove方法试试,发现就报错了set1.remove('女助理')KeyError: '
    
    

     

    14、symmetric_difference()

    描述:symmetric_difference() 方法返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。

    语法:set.symmetric_difference(set)

    参数:set -- 集合

    set1 = {'周扬青','徐怀钰','Makiyo','Selina'}#建一个罗志祥的女友集合
    set2 = {'周扬青','徐怀钰','罗玉凤','乔碧萝'}#再建一个罗志祥的女友集合set1.symmetric_difference(set2) {'Makiyo', 'Selina', '乔碧萝', '徐怀钰', '罗玉凤'}
    
    
    

    15、symmetric_difference_update()

    描述:symmetric_difference_update() 方法移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。

    语法:set.symmetric_difference_update(set)

    参数:set -- 要检测的集合

    set1 = {'周扬青','徐怀钰','Makiyo','Selina'} #建一个罗志祥的女友集合set2 = {'周扬青','徐怀钰','罗玉凤','乔碧萝'}#再建一个罗志祥的女友集合set1.symmetric_difference_update(set2)print(set1){'Selina', '乔碧萝', 'Makiyo', '罗玉凤'}
    
    

    16、union()

    描述:union() 取并集,效果等同于 | ,重复元素只会出现一次,但是括号里可以是 list,tuple,其他 , 甚至是 dict

    语法:set.union(set1, set2...)

    参数:

    • set1 -- 必需,合并的目标集合

    • set2 -- 可选,其他要合并的集合,可以多个,多个使用逗号 , 隔开。

    示例:

    
    
    #两个集合的并集set1 = {'小苹果','大桃子','长香蕉'}set2 = {'小李子','大萝卜','长香蕉'}set1.union(set2){'大桃子', '大萝卜', '小李子', '小苹果', '长香蕉'}#长香蕉只出现一次
    #三个集合并集set3 = {'烂柿子','罗志祥'}set1.union(set2,set3)
    {'大桃子', '大萝卜', '小李子', '小苹果', '烂柿子', '罗志祥', '长香蕉'}
    #集合和列表也可以set4=['小可爱','西红柿']set1.union(set4) {'大桃子', '小可爱', '小苹果', '西红柿', '长香蕉'}
    #利用交集并集来写一个字符串相似的小方法def jaccard_sim(arg0,arg1): set1 = set(arg0) set2 = set(arg1) sim = len(set1.intersection(set2))/len(set1.union(set2)) return(sim)#intersection 求集合的交集
    arg0 = '(质量问题)标识标签不合格'arg1 = '(质量问题)涉嫌质量不合格'jaccard_sim(arg0,arg1)0.6428571428571429
    #检测下两个标题的相似性arg0 = '罗志祥道歉人设崩塌:多个品牌商中枪 代言微博遭删除'arg1 = '凌晨五点的罗志祥:你知不知道为了出轨,我有多努力'jaccard_sim(arg0,arg1)0.1428571428571
    
    

    17、update()

     描述:update() 方法用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。

    语法:set.update(set)

    参数:set -- 必需,可以是元素或集合

    x = {"apple", "banana", "cherry"}y = {"google", "runoob", "apple"}x.update(y)print(x){'banana', 'apple', 'google', 'runoob', 'cherry'}
  • 相关阅读:
    Sum Root to Leaf Numbers 解答
    459. Repeated Substring Pattern
    71. Simplify Path
    89. Gray Code
    73. Set Matrix Zeroes
    297. Serialize and Deserialize Binary Tree
    449. Serialize and Deserialize BST
    451. Sort Characters By Frequency
    165. Compare Version Numbers
    447. Number of Boomerangs
  • 原文地址:https://www.cnblogs.com/zhengp/p/14711409.html
Copyright © 2011-2022 走看看