首页 > 编程语言 >python集合常用操作汇总

python集合常用操作汇总

时间:2022-12-08 20:13:12浏览次数:46  
标签:set python demo 元素 汇总 print frozenset 集合

1. 集合类型 

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

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

2. 集合的创建 {}或set()函数

  • 将一个用逗号分割的元素列表放在一堆花括号内可以创建一个非空set集合,如{'Tom', 'Jerry', 'Peter'}
  • 给set的构建函数传递一个空值将会创建一个空set集合(注意:{}表示的是一个空字典而不是空set集合)
  • 给set的构架你函数传一个非空iterable参数将会创建一个非空set集合
# 使用内置函数set()创建空集合
set_1 = set()
print(set_1,type(set_1),"\n")
# {}表示的是一个空字典而不是空set集合
set_2 = {}
print(set_2,type(set_2),"\n")

# 用{ }创建集合对象时,集合内元素必须是不可变数据类型
# set_3 = {[34, 56], [78, 90]}
# 注:TypeError: unhashable type: 'list'

# [1,2,3,4,4] set()方法可以包裹列表,且可帮助列表去重
list_set = [1,2,3,4,4]
# 此时可能想再转回列表,利用列表内置函数list()即可
set_4 = set(list_set)
print(set_4,type(set_4),"\n")

# 字典同理
# set_test = {{'name': 'll'}}
# TypeError: unhashable type: 'dict'
dict_set = set({'name': 'll'})
# {'name'} 留下的是key值
print(dict_set,type(dict_set))

执行结果:

set() <class 'set'> 

{} <class 'dict'> 

{1, 2, 3, 4} <class 'set'> 

{'name'} <class 'set'>

3.集合增加元素的操作

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

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

set_demo = {1,2,"abc","ef"}
set_demo.add(520)
print(set_demo)
set_demo.update(['1314','傻子'])
print(set_demo)

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

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

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

  利用python内置函数del ;

set_demo = {1,2,"abc","ef"}
set_demo.remove(1)
print(set_demo)
# KeyError: 'py' (元素不存在时会报错)
# set_demo.remove(1111)

# 元素不存在时不会报错
set_demo.discard(2)
print(set_demo)
set_demo.clear()
print(set_demo)
# NameError: name 'set_demo' is not defined
# del set_demo
# print(set_demo)

执行结果:

{'ef', 2, 'abc'}
{'ef', 'abc'}
set()

 5.集合之间的运算

5.1 集合的差集

  • a, b两个集合,属于a且不属于b的元素集,就是a与b的差集;
  • 利用difference函数,a.difference(b)可以获取结果; 或直接a - b;
  • a.difference_update(b) 将差集结果赋值给a、此时b不变;
a = {1,2,3,4}
b = {3,4,5,6}
print(a.difference(b))
print(a-b)
print(a,b)
print(id(a))
# a原有的集合对象被修改了,集合b未被修改
a.difference_update(b)
print(a,b)
print(id(a))

执行结果:  

{1, 2}
{1, 2}
{1, 2, 3, 4} {3, 4, 5, 6}
2503182612320
{1, 2} {3, 4, 5, 6}
2503182612320

5.2 集合的交集 

  • a,b集合中共有的元素集;
  • a.intersection(b, c...)  可以多个集合一起取交集;
  • 利用&符号, a & b & c;
  • a.intersection_update(b, c...)  将交集结果更新到a集合;
a = {1,2,3,4}
b = {3,4,5,6}
c = {3,7,8}
print(a & b & c)
print(a.intersection(b,c))
a.intersection_update(b,c)
print(a,b,c)

执行结果:

{3}
{3}
{3} {3, 4, 5, 6} {8, 3, 7}

5.3 集合的并集 

  • 几个集合中所有元素组成的集合;
  • a.union(b, c ...) ;
  • a  |  b  |  c ;
a = {1,2,3,4}
b = {3,4,5,6}
c = {3,7,8}
print(a | b | c)
print(a.union(b,c))
print(a,b,c)

执行结果: 

{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3, 4} {3, 4, 5, 6} {8, 3, 7}

5.4 对称差集

  • 只在a和只在b中的元素集合;
  • a.symmetric_difference(b)、a.symmetric_difference_update(b)、a ^ b
a = {1,2,3,4}
b = {3,4,5,6}
print(a ^ b)
print(a.symmetric_difference(b))
a.symmetric_difference_update(b)
print(a,b)

执行结果:

{1, 2, 5, 6}
{1, 2, 5, 6}
{1, 2, 5, 6} {3, 4, 5, 6}

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

  • a.isdisjoint(b)  判断两集合是否没有相同元素;
  • a.issubset(b) 判断一个集合a是否是集合b 的子集;
  • 与子集相对,b.issuperset(a) 判断集合b是否是集合a的超集
a = {1,2,3,4}
b = {3,4,5,6}
print(a.isdisjoint(b))
print(a.isdisjoint("5"))
print(a.issubset({1,2,3,4,5}))
print(a.issuperset({1,2}))

执行结果: 

False
True
True
True

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

  • in 、not in 成员判断;
  • len(set)  集合长度;
a = {1,2,3,4}
print(1 in a)
print(len(a))

执行结果: 

True
4

7. 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})
# AttributeError: 'frozenset' object has no attribute 'add'
# a.add(45) 
# frozenset就不存在更改操作相关的方法了

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

标签:set,python,demo,元素,汇总,print,frozenset,集合
From: https://www.cnblogs.com/xmtxh/p/16967140.html

相关文章

  • python中input()、print()用法
    1.input()函数常涉及的强制类型转换第一种是在键入时进行转换,例如:a=int(input())1a=int(input())2b=int(input())3a=a+b4print(a)第二种则是在使用时进行转......
  • 4.python-定义函数
    函数1.pycharm快捷键Ctrl+Q快速查看文档(能快速查看到选择的函数创建者对该函数的注释)2.定义(1)用于封装一个特定的功能,表示一个功能或者行为。(2)函数是可以......
  • 纯手撸web框架、基于wsgiref模块、代码封装优化、动静态网页、jinja2模块、前端、后端
    目录推导流程纯手撸web框架基于wsgiref模块代码封装优化动静态网页jinja2模块前端、后端、数据库三者联动python主流web框架django简介django基本使用djangoapp的概念djan......
  • xiaosir_python题
    1、给三个整数,求他们中的最大值。请用你熟悉的编程语言给出题解。n1=int(input('第1个数:'))n2=int(input('第2个数:'))n3=int(input('第3个数:'))max=0ifn1>n2......
  • 记一次Ubuntu系统修改自带Python软连接的错误
    操作系统;Ubuntu20.04刚装上系统,看了一下有Python,由于是Python3.10,所有想将Python3命令修改为Python命令,感觉更顺手,于是就把 /usr/bin/目录下的Python3软连接名称修改......
  • 6.python-练习定义函数
    defprint_content(content):print(content)defget_sentence_constituent(sentence,constituent):returninput("请输入%s的%s:"%(sentence,constituent))......
  • python5
    一、使用字符串拼接输出一个关于程序员的笑话programmer_1='程序员甲:搞IT太辛苦了,我想换行……怎么办?'programmer_2='程序员乙:敲一下回车键'print(programmer_1+programme......
  • Python判断一个变量值是否为数字数值类型
    fromnumbersimportNumberisinstance(x,Number)下面是源代码中关于Number的描述classNumber(metaclass=ABCMeta):"""Allnumbersinheritfromthisclass.......
  • python基础之条件判断语句(笔记)
    #条件判断语句(if语句)#语法:if条件表达式: #     代码块#执行的流程:if语句在执行时,会先对条件表达式进行求值判断,# 如果为True,则执行if后的语句# ......
  • python123_第七周练习_程序设计题
    羽毛球计分规则:1.21分制,3局2胜为佳2.每球得分制3.每回合中,取胜的一方加1分4.当双方均为20分时,领先对方2分的一方赢得该局比赛5.当双方均为29分时,先取得30......