python基础-集合的常用操作

{} 集合是一种无序不可重复的序列;集合常用于对两个列表的交并差处理;

集合没有任何获取元素的方法,只用作处理列表或元组的临时数据类型,不适合数据的存储和传输。

1.集合的创建

  利用内置函数set() 或 { }创建;

set_test = set()  # 创建空集合
print(set_test)  # set()
print(type(set_test))  # <class 'set'>

set_test2 = {}
print(set_test2)  # {}
print(type(set_test2))  # <class 'dict'>

set_test3 = {'python', True, 23}
print(set_test3)  # {True, 23, 'python'}

# 用{ }创建集合对象时,集合内元素必须是不可变数据类型
# set_test4 = {[34, 56], [78, 90]}  # TypeError: unhashable type: 'list'
# print(set_test4)
test_list = [34, 56, 34, 90]
set_test5 = set(test_list)
print(set_test5)  # {56, 34, 90} set()方法可以包裹列表,且可帮助列表去重
print(list(set_test5))  # [56, 34, 90] (此时可能想再转回列表,利用列表内置函数list()即可)
# 字典同理
# set_test = {{'name': 'll'}}  # TypeError: unhashable type: 'dict'
# print(set_test)
dict_set = set({'name': 'll'})  # {'name'} 留下的是key值
print(dict_set)

 

2.集合增加元素的操作

  可以利用set.add(元素) 一次增加一个元素;

  利用set.update(可迭代对象) 一次增加多个元素;已经存在的元素不会重复添加;

test_set = {78, 'python', False}
test_set.add(45)
print(test_set)  # {'python', False, 45, 78}
test_set.update(['go', 67])
print(test_set)  # {False, 'go', 67, 45, 78, 'python'}

  

3.集合中删除元素的操作

  set.remove(元素)  删除指定元素;

  set.clear()  清空集合中元素;

  利用python内置函数del ;

test_set = {78, 'python', False}
test_set.remove(78)
print(test_set)  # {'python', False}
# test_set.remove('py')  # KeyError: 'py' (元素不存在时会报错)
test_set.clear()  # set()
print(test_set)
del test_set
print(test_set)  # NameError: name 'test_set' is not defined

 

4.集合的差集

  a, b两个集合,属于a且不属于b的元素集,就是a与b的差集;

  利用difference函数,a.difference(b)可以获取结果; 或直接a - b;

  a.difference_update(b) 将差集结果赋值给a、此时b不变;

a = {34, 'python', True}
b = {34, 89}
print(a.difference(b))  # {True, 'python'}

print(a - b)  # {True, 'python'}

print(a)  # {True, 34, 'python'}
print(id(a))  # 140678808395104
a.difference_update(b)
print(a)  # {True, 'python'}
print(id(a))  # 140678808395104 (a原有的集合对象被修改了)
print(b)  # {89, 34} (集合b未被修改)

 

5.集合的交集

  a,b集合中共有的元素集;

  a.intersection(b, c...)  可以多个集合一起取交集;

  利用&符号, a & b & c;

  a.intersection_update(b, c...)  将交集结果更新到a集合;

a = {34, 'python', True}
b = {34, 89}
c = {'go', 34}
print(a & b & c)  # {34}
print(list(a & b & c)[0])  # 34 (可以将集合先转化为列表,就可以通过索引访问元素了)

print(a.intersection(b, c))  # {34}

a.intersection_update(b, c)
print(a)  # {34}
print(b)  # {89, 34}
print(c)  # {'go', 34}

 

6.集合的并集

  几个集合中所有元素组成的集合;

  a.union(b, c ...) ;

  a  |  b  |  c ;

  a.union_update(b, c ...) ;

a = {34, 'python', True}
b = {34, 89}
c = {'go', 34}
print(a | b | c)  # {True, 34, 'go', 89, 'python'}

print(a.union(b, c))  # {True, 34, 'python', 'go', 89}

# 传入的参数可以是可迭代对象
print(a.union([34, 999]))  # {'python', 34, True, 999}
# 差集和交集参数同样可以是可迭代对象
print(a.difference((34,)))  # {True, 'python'}
print(a.intersection('rtrt'))  # set()

 

7.集合的一些返回值是bool型的函数

  a.isdisjoint(b)  判断两集合是否没有相同元素;

  a.issubset(b) 判断一个集合a是否是集合b 的子集;

  与子集相对,b.issuperset(a) 判断集合b是否是集合a的超集;

a = {34, 'python', True}
b = {34, 89}
print(a.isdisjoint(b))  # False

print(b.isdisjoint({'go'}))  # True

print(b.issubset({34, 89, 90}))  # True

print({34, 89, 90}.issuperset(b))  # True

a = {34, 56, 78}
print(a.isdisjoint([56]))  # False

 

8.对称差集

  只在a和只在b中的元素集合;

  a.symmetric_difference(b)、a.symmetric_difference_update(b)、a ^ b

a = {34, 'python', True}
b = {34, 89}

print(a ^ b)  # {'python', 89, True}

print(a.symmetric_difference(b))  # {'python', 89, True}

a.symmetric_difference_update(b)
print(a)  # {89, True, 'python'}
print(b)  # {89, 34}

  

9.简单函数在集合的使用

  in 、not in 成员判断;

  len(set)  集合长度;

a = {34, 'python', True}
b = {34, 89}

print(34 in a)  # True
print(len(b))  # 2

 

10.frozenset() 创建不可变集合

  不可变集合之于集合,相当于元组之于列表

   因为{ }创建集合时,存储的对象必须是不可变类型元素,所以想存储另一个集合时,就不可以了,frozenset就解决了这个问题;

  frozenset还可以作为字典的key、且存在哈希值;

# frozenset(可迭代对象)
# 可以传集合
a = frozenset({34, 56})
print(a)  # frozenset({56, 34})

# 可以传列表
b = frozenset([3, 4])
print(b)   # frozenset({3, 4})
# 可以传元组
c = frozenset((454,))
print(c)   # frozenset({454})

# { }创建集合时,集合中不能存储集合
# d = {{34}}  # TypeError: unhashable type: 'set'
# 可以存储不可变集合
d = {frozenset([454])}
print(d)   # {frozenset({454})}

a = frozenset({34, 56})
print(a)  # frozenset({56, 34})
a.add(45)  # AttributeError: 'frozenset' object has no attribute 'add'
# frozenset就不存在更改操作相关的方法了

e = frozenset('eee')
print(e)  # frozenset({'e'})

 

总结

  python基础-集合的常用操作

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python基础-集合的常用操作 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • python基础-异常处理

    1.异常与异常处理   异常就是程序中的错误,正常情况下程序是自上而下逐行执行的,当遇到异常时,就会报错退出执行;   异常处理就是在程序中可能出错的地方进行提前预捕获,并将异常部分的程序进行修正使得程序正常执行。   2.异常的语法   利用try … except … 关键字 # 以字符串的upper方法为例 def new_upper(str_…

    2023年4月2日
    00
  • python基础-面向对象

    1.面向对象   面向对象编程是在面向过程编程的基础上发展来的,它比面向过程编程具有更强的灵活性和扩展性,所以可以先了解下什么是面向过程编程:   面向过程编程的核心是过程,就是分析出实现需求所需要的步骤,通过函数一步一步实现这些步骤,接着依次调用即可,再简单理解就是程序   从上到下一步步执行,从头到尾的解决问题;   而面向对象编程是把构成事物的整个需求…

    2023年4月2日
    00
  • python基础-数字类型

    1.数字的简单运算   常用运算符     +, -, *,  /, %, //,**          = 就是赋值运算符,在变量介绍中已提及过,a=13;     这里要说下赋值运算符的参数运算,     +=, -=, *=, /=, //=, %=      a += b –> a = a + b  参数赋值可以使代码更整洁,可读性更强   …

    2023年4月2日
    00
  • python基础-函数

    1.函数定义   函数就是将完成一件事情的步骤封装在一起并得到最终的结果;   函数名代表了这个函数要做的事情;   函数体是实现函数功能的流程;   添加一个函数也被叫做实现了一个方法或功能;   函数可以帮助我们重复使用一些操作步骤;   2.def   通过关键字def定义函数;   def  name(args…):     print(”) …

    2023年4月2日
    00
  • python基础–简单数据类型预览

    为了适应更多的使用场景,将数据划分为多种类型,每种类型都有各自的特点和使用场景, 帮助计算机高效的处理和展示数据。(比如数字用于数学运算、字符串用于信息传递、页面文字展示等) 1.数字类型   整型     整型就是我们说的整数,0也是整数,是一种特殊的整数;      int 既是整型的代表,又是定义整型的函数;      定义一个整型,并不一定必须用in…

    2023年4月2日
    00
  • python基础-字符串常用方法

    1.字符串capitalize函数   (capitalize vt. 资本化,用大写字母书写(或印刷); 把…首字母大写;)   将字符串的首字母大写,其它字母小写;   用法:newstr = string.capitalize() 修改后生成一个新字符串(因为字符串是不可更改数据类型);      ”.capitalize() 返回为空,不会报错; …

    2023年4月2日
    00
  • python基础–基本概念

    1.脚本的文件格式   脚本名.py         eg: hello.py   2.脚本结构   大概三部分,脚本头+导入部分+业务模块         每一块都是非必须的,按需填写即可;      为了书写规范,一般脚本头和导入部分中间空一行,导入部分和业务部分中间空两行;   3.头部注释   写在python脚本第一行,用#开头表示的信息就是头注释…

    2023年4月2日
    00
  • python基础-较复杂数据类型预览

    1.初识列表   列表就是队列;   列表是一种有序的,且内容可重复的数据类型;   用list代表列表,也可以用list()定义一个列表,同时定义列表可以直接使用 [ ];   python中列表是一个无限制长度的数据结构;(但为了响应速度,也应避免列表中数据过大);   列表中可以存储各种数据类型,数字、字符串、布尔型、None、另一个列表等。     …

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部