python的集合知识点有哪些

这篇文章主要介绍“python的集合知识点有哪些”,在日常操作中,相信很多人在python的集合知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python的集合知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业德阳机房服务器托管报价,主机托管价格性价比高,为金融证券行业服务器托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。

集合的定义

集合(dict)是一组0至多个无序的、无重复的不可变对象。集合的底层结构也是散列表(hash table),可以快速查找集合内的元素,是一种以空间换时间的数据结构。

set1 = {'今日', '头条', '关于', '集合','案例'}
for i in set1:
    print(i)
# 多次运行上述代码验证,可以发现每次打印的顺序都不一样,说明是无序的。

集合的创建

  • 空集合,set()。

    set1 = set()
    print(type(set1))
    
    out:
    

  • 1个元素的集合,花括号将其包围。

    set1 = {'今日'}
    print(type(set1))
    
    out:
    

  • 多个元素的集合,用花括号将所有元素包围,元素之间用逗号隔开。

    set1 = {'今日', '头条', '关于', '集合','案例'}
    for i in set1:
        print(i)
    
    out:
    关于
    案例
    今日
    集合
    头条

  • 其他类型转换成集合。

    tupl1 = ('name', 'age', 'money', 'height')
    list1 = ["Mike", 20, 8000, 180]
    dict1 = {'name': 'Mike', 'age': 20, 'money': 8000, 'height': 180}
    set1 = set(tupl1)
    set2 = set(list1)
    set3 = set(dict1)
    print(set1, type(set1))
    print(set2, type(set2))
    print(set3, type(set3))
    
    out:
    {'money', 'height', 'name', 'age'} 
    {8000, 180, 'Mike', 20} 
    {'money', 'height', 'name', 'age'} 

  • 推导式,创建方法和列表推导式如出一辙。

    set1 = {i for i in range(10)}
    print(set1, type(set1))
    
    out:
    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 

集合的访问

  • 集合比较特殊,没有直接访问元素的方法。但可以对集合for循环遍历元素。

    set1 = {'头条', 5, 4, 3, '集合', 2, 1, '测试'}
    for i in set1:
        print(i)
    
    out:
    头条
    2
    3
    4
    5
    1
    测试
    集合

集合的增加

  • 通过add方法添加元素。add的参数只可接收不可变对象(数字、字符串、元组),不可接收可变对象(列表、字典、集合)。

    set1 = {'头条', 3, '集合', 2, 1, '测试'}
    set1.add(('abc','bcd')) 
    print(set1)
    
    out:
    {1, 2, 3, '头条', '集合', '测试', ('abc', 'bcd')}

  • 通过update方法添加。update的参数可以是不可变对象,也可以是可变对象(如果嵌套了可变对象会报错)。

    set1 = {'头条', 3, '集合', 2, 1, '测试'}
    set2 = [[i, j] for i in range(5, 8) for j in range(8, 10)]
    # set1.update(set2)  报错,因为set2内部元素是列表,不能转成不可变对象
    set3 = [i for i in range(5, 8)]
    set1.update(set3)  # 成功,因为set3内部元素是数字,可转成不可变对象
    print(set1)
    
    out:
    {1, 2, 3, '测试', 5, 6, 7, '头条', '集合'}

集合的删除

  • del:可直接删除集合本身,但不能指定删除集合的元素。

    set1 = {'头条', 3, '集合', 2, 1, '测试'}
    del set1

  • pop方法:无参数方法,随机删除一个元素并返回。

    set1 = {'头条', 3, '集合', 2, 1, '测试'}
    print(set1.pop())
    
    out:
    集合

  • remove方法:移除指定元素,若该元素不存在会报错,无返回值。

    set1 = {'头条', 3, '集合', 2, 1, '测试'}
    set1.remove('头条')
    print(set1)
    # set1.remove(5)  5b不是set1的元素,移除时会报KeyError
    
    out:
    {1, 2, 3, '集合', '测试'}

  • discard方法:移除指定元素,若该元素不存在不报错,无返回值。

    set1 = {'头条', 3, '集合', 2, 1, '测试'}
    set1.discard(5)
    set1.discard(1)
    print(set1)
    
    out:
    {2, 3, '集合', '头条', '测试'}

  • clear方法:清空集合内容,保留集合本身,在循环体中需要清空集合时优先用这个方法,而不要新建集合,因为新建的开销相对较大。

    set1 = {'头条', 3, '集合', 2, 1, '测试'}
    set1.clear()
    print(set1)
    
    out:
    {}

集合的运算

  • 并集:集合A和集合B所有元素。

    set_a = {0, 1, 2, 3, 4}
    set_b = {3, 4, 5, 6, 7}
    set_c = set_a.union(set_b)
    print(set_c)
    
    out:
    {0, 1, 2, 3, 4, 5, 6, 7}

  • 交集:集合A和集合B共有的元素。

    set_a = {0, 1, 2, 3, 4}
    set_b = {3, 4, 5, 6, 7}
    set_c = set_a.intersection(set_b)  # 返回集合a和b的交集
    set_a.intersection_update()  # 直接把集合a中不是交集的元素去掉
    print(set_c)
    print(set_a)
    
    out:
    {3, 4}
    {3, 4}

  • 差集:集合A中有而集合B中没有的元素。

    set_a = {0, 1, 2, 3, 4}
    set_b = {3, 4, 5, 6, 7}
    set_c = set_a.difference(set_b)  # 返回集合a和b的差集
    set_a.difference_update(set_b)  # 直接把集合a中不是差集的元素去掉
    print(set_c)
    print(set_a)
    
    out:
    {0, 1, 2}
    {0, 1, 2}

  • 对等差分:集合A和B的并集再去除集合A和B的交集

    set_a = {0, 1, 2, 3, 4}
    set_b = {3, 4, 5, 6, 7}
    set_c = set_a.symmetric_difference(set_b)  # 返回集合a和b的对等差分
    set_a.symmetric_difference_update(set_b)  # 把集合a改成集合a和b的对等差分
    print(set_c)
    print(set_a)
    
    out:
    {0, 1, 2, 5, 6, 7}
    {0, 1, 2, 5, 6, 7}

集合的查询

  • 对集合的元素做in运算。

    set1 = {'头条', 3, '集合', 2, 1, '测试'}
    print(5 in set1)
    print(1 in set1)
    
    out:
    False
    True

  • 有无交集:isdisjoint方法,判断集合A和B有没有交集,有返回False,没有返回True。

    set_a = {0, 1, 2, 3, 4}
    set_b = {3, 4, 5, 6, 7}
    set_c = {8, 9, 10}
    print(set_a.isdisjoint(set_b))
    print(set_a.isdisjoint(set_c))
    
    out:
    False
    True

  • 是否子集:issubset方法,判断集合A是不是集合B的子集,是返回True,不是返回False。

    set_a = {3, 4}
    set_b = {3, 4, 5, 6, 7}
    set_c = {8, 9, 10}
    print(set_a.issubset(set_b))
    print(set_c.issubset(set_b))
    
    out:
    True
    False

  • 是否父集:issuperset方法,判断集合A是不是集合B的父集,是返回True,不是返回False。

    set_a = {3, 4}
    set_b = {3, 4, 5, 6, 7}
    set_c = {8, 9, 10}
    print(set_b.issuperset(set_a))
    print(set_b.issuperset(set_c))
    
    out:
    True
    False

集合的其他方法

集合的内置方法非常丰富,除了上述说过的方法外,还有len和copy。

  • len,返回集合的元素长度。

  • copy,建立集合的副本,内容一致,id不同。(注意:嵌套结构要用deepcopy)。

以下是案例:

set_a = {0, 1, 2, 3, 4}
print(len(set_a))
set_b = set_a.copy()
print(id(set_a), id(set_b))

out:
5
2269718817472 2269718817024

集合的特殊用法

集合有去重功能,非常强大。关于集合去重功能的运用我举2个特殊的用法:

  • 一行代码判断是否有重复元素。

    list1 = [1, 1, 2, 3, 4, 5]
    list2 = [1, 2, 3, 4, 5, 6]
    str1 = "aabbcdefg"
    str2 = "abcdefghi"
    print(len(set(list1)) == len(list1))  # 不相等表示有重复
    print(len(set(list2)) == len(list2))  # 相等表示无重复
    print(len(set(str1)) == len(str1))  # 不相等表示有重复
    print(len(set(str2)) == len(str2))  # 相等表示无重复
    
    out:
    False
    True
    False
    True

  • 二行代码实现去重并保持原有顺序。

    list1 = [1, 1, 2, 3, 4, 5]
    list2 = list(set(list1))
    list2.sort(key=list1.index)
    print(list2)
    
    out:
    [1, 2, 3, 4, 5]

到此,关于“python的集合知识点有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


网页名称:python的集合知识点有哪些
本文网址:http://ybzwz.com/article/jhidgd.html