基本数据类型的内置方法

一 int 类型

​ 1、作用

​ 2、定义

​ int( ) :调用创建整型数据功能

age=10  # 本质age = int(10)

补充:

res = print(‘xxx’)  #print不生产产品
print(res) #None  

​ 3、类型转换

​ 3.1 出数字的字符串转成 int

int('1010') #1010

​ 3.2 了解

​ 十进制 ——>二进制

print(bin(11)) #0b1011

​ 十进制——>八进制

print(oct(11)) # 0o13

​ 十进制——>十六进制

print(hex(11)) # 0xb
print(hex(123)) # 0x7b

​ 二进制——>十进制

print(int('0b1011',2)) # 11

​ 八进制——>十进制

print(int('0o13',8)) # 11

​ 十六进制——>十进制

print(int('0xb',16)) # 11

二 float 类型

​ 1、作用

​ 2、定义

​ float():调用创建浮点型数据的功能

salary=1.1  # 本质salary=float(1.1)

​ 3、类型转换

res=float("3.1")
print(res,type(res)) #3.1 <class 'float'>

​ 4、使用:

​ 使用的就是数学运算 + 比较运算

三 字符串类型

1、作用

​ 用于记录一些描述性的信息。

字符串是一个值,它是有序的(有索引),不可变类型。

​ 有虚类型=>序列类型

字符串的修改操作都是在原字符串的基础上新建一个字符串,并不是直接对原字符串进行修改

2、定义

​ 字符串定义:在单引号/双引号/三引号内包含一串字符

​ 只要在引号内,空格也算字符

name1 = 'han'  # 本质:name = str('任意形式内容')
name2 = "zhang"  # 本质:name = str("任意形式内容")
name3 = """kang"""  # 本质:name = str("""任意形式内容""")

3、类型转换

​ str可以把任意其他类型都转为字符串

res=str({'a':1})
print(res,type(res)) #{'a': 1} <class 'str'>

4、使用:内置方法

4.1 按索引取值(正向取+反向取):只能取(不能改

​ 通过索引不能修改字符串

msg='hello world'
# 正向取
print(msg[0]) #h
print(msg[4]) #o
# 反向取
print(msg[-1]) #d
msg[0] = H
print(msg) #报错, 不能通过索引改

4.2 切片:索引的扩展应用,从一个大字符串中拷贝出一个子字符串(顾头不顾尾,步长)

msg = 'hello world'
print(msg[0:4]) #hell
print(msg[0:5:2]) #hlo
print(msg[-1]) #d
print(msg[:]) #hello world 正着取所有
print(msg[0: -1]) #hello worl
print(msg[4:0:-1]) #olle
print(msg[4:0:-2]) #ol
print(msg[::-1]) #dlrow olleh 倒着取所有

4.3 统计长度 len

msg = 'hello world'
print(len(msg)) #11

4.4 成员运算 in 和 not in

​ 判断一个子字符串是否在一个大字符串里

print("alex" in "alex is sb")  #True
print("alex" not in "alex is sb") #False
print(not "alex" in "alex is sb") # False

4.5 移除字符串左右两侧的符号 strip

​ 如果想要去掉字符串中所有符号 即 ’字符串‘.strip(’添加想要去掉的符号‘)

msg='**/*=-**egon**-=()**'
print(msg.strip('*/-=()'))  #egon

​ 默认去掉两侧的空格

# msg='      egon      '
# res=msg.strip()
# print(msg) # 不会改变原值
# print(res) # 是产生了新值

​ 了解:strip 之去掉两边,不能去掉中间

msg='****egon****'
print(msg.strip('*')) #egon
msg1='****e*****gon****'
print(msg1.strip('*')) #e*****gon				

​ strip lstrip rstrip比较

​ strip:去掉左右两侧的符号

​ lstrip:去掉左侧的符号

​ rstrip:去掉右侧的符号

msg='***egon****'
print(msg.strip('*')) #egon
print(msg.lstrip('*')) #egon****
print(msg.rstrip('*')) #***egon

4.6 切分 split

​ 切分:把一个字符串按照某种分隔符进行切分,得到一个列表

​ 1)默认分隔符是空格

info='egon 18 male'
res=info.split()
print(res) #['egon', '18', 'male']

​ 2)指定分隔符

info='egon:18:male'
res=info.split(':')
print(res) #['egon', '18', 'male']

​ 3)指定分隔次数

info='egon:18:male'
res=info.split(':',1)
print(res) #['egon', '18:male']

​ 4)split 与 rsplit比较

​ split :从左切

​ rsplit : 从右切

info="egon:18:male"
print(info.split(':',1)) # ["egon","18:male"]
print(info.rsplit(':',1)) # ["egon:18","male"]

​ 循环

info='egon:18:male'
for x in info:
    print(x)

​ 结果展示:

e g o n : 1 8 : m a l e

 	**4.7  lower  upper**
msg='AbbbCCCC'
print(msg.lower()) #abbbcccc 全改为小写
print(msg.upper()) #ABBBCCCC	全改为大写

4.8 startswith endwith

print("alex is sb".startswith("alex")) #True
print("alex is sb".endswith('sb'))  #True

4.9 format

cmd = input('请输入命令:').strip()
print('{}正在执行。。。'.format(cmd))

4.10 join:把列表(元素全为字符串的)拼接成字符串

​ 按照某个分隔符号,把元素全为字符串的列表拼接成一个大字符串

l = ['egon', '18', 'male']
res =":".join(l) # 按照某个分隔符号,把元素全为字符串的列表拼接成一个大字符串
print(res) #egon:18:male

​ 注:如果列表中有元素不是字符串的话,拼接会报错

l1=[1,"2",'aaa']
res = ":".join(l1)
print(res) #报错

4.11 替换 replace

msg="you can you up no can no bb"
print(msg.replace("you","YOU",)) #YOU can YOU up no can no bb
print(msg.replace("you","YOU",1))#YOU can you up no can no bb

4.12 isdigit

​ 判断字符串是否由纯数字组成

​ 只能识别 bytes(如:b'4') 及 unicode(如:u'4') 类型数字

print('123'.isdigit()) #True
print('12.3'.isdigit()) #False

​ 补充:

num1=b'4' #bytes
num2=u'4' #unicode,python3中无需加u就是unicode
num3='四' #中文数字
num4='Ⅳ' #罗马数字

# isdigit只能识别:num1、num2
print(num1.isdigit()) # True
print(num2.isdigit()) # True
print(num3.isdigit()) # False
print(num4.isdigit()) # False

# isnumberic可以识别:num2、num3、num4
print(num2.isnumeric()) # True
print(num3.isnumeric()) # True
print(num4.isnumeric()) # True

# isdecimal只能识别:num2
print(num2.isdecimal()) # True
print(num3.isdecimal()) # False
print(num4.isdecimal()) # False

4.13 find rfind index rindex

​ 1)find(' 字符串'): 返回要查找的字符串在大字符串中的起始索引,如果没有,则会返回 -1

​ 2)rfind(' 字符串'): 返回要查找(从右开始查找)的字符串在大字符串中的起始索引

​ 3)index('字符串’):返回要查找的字符串在大字符串中的起始索引,如果没有会报错

​ 4)rindex('字符串'): 返回要查找(从右开始查找)的字符串在大字符串中的起始索引

msg='hello egon hahaha'
print(msg.find('e')) #1 返回要查找的字符串在大字符串中的起始索引
print(msg.find('egon')) #6
print(msg.index('e')) #1 
print(msg.index('egon')) #6
print(msg.find('xxx')) #返-1 代表找不到
print(msg.index('xxx')) #找不到,报错

**4.14 count** 

​ count:查找字符串在整个大的字符串中的个数

msg='hello egon hahaha egon、 egon'
print(msg.count('egon')) #3

 **4.15 center,ljust,rjust,zfill**
#总宽度为20,字符串居中,不够用 * 补全
print('egon'.center(20,'*')) #********egon********
#总宽度为50,字符串居左,不够用 * 补全
print('egon'.ljust(20,'*')) #egon****************
#总宽度为50,字符串居右,不够用 * 补全
print('egon'.rjust(20,'*')) #****************egon
#总宽度为 10,字符串居右,
print('egon'.zfill(10)) #000000egon

4.16 captalize,swapcase,title

#captalize:首字母大写
print('hello world egon'.capitalize()) #Hello world egon
#swapcase:大小写翻转
print('Hello WorLd EGon'.swapcase())#hELLO wORlD egON
# title:每个单词的首字母大写
print('hello world egon'.title()) #Hello World Egon

4.17 is的用法

#isupper 判断是否为大写
print('abc'.isupper()) #False
#islower 判断是否为小写
print('abc'.islower()) #True
#istitle 判断字符串的单词首字母是否为大写
print('Hello World'.istitle()) #True
#isalnum():判断是否由数字,字母或者数字加字母组成
print('123aab'.isalnum()) #True
print('123'.isalnum()) #True
print('abc'.isalnum()) #True
print('123#abc'.isalnum())#False
#isalpha 判断是否全为字母
print('abc'.isalpha())  #True
print('abc1'.isalpha())  #False
#isspace 判断字符串是否全为空格
print('  '.isspace())   #True
print('ab  '.isspace()) #False
#isidentifier 判断字符串命名是否规范
print('print'.isidentifier())  #True  python
print('age_of_egon'.isidentifier()) #True
print('1age_of_egon'.isidentifier()) #False

4.18 expandtabs

​ expandtabs() 方法把字符串中的 tab 符号(' ')转为空格,tab 符号(' ')默认的空格数是 8。

​ 默认以 8 个空格数为一个 制表符

name ='tony	hello'  
msg ='hlelo	world'
awp = 'withswitch'

# 设置制表符代表的空格数,默认为 8
print(msg)  #hello	world 用3个空格扩展
print(awp.expandtabs(4))#withswitch 没有扩展
print(name.expandtabs(1)) #tony hello 用一个空格扩展
print(name.expandtabs(2)) #tony  hello 用两个空格扩展
print(name.expandtabs(3)) #tony  hello 用两个空格扩展
print(name.expandtabs(4)) #tony    hello 用四个空格扩展
print(name.expandtabs(5))#tony hello 用一个空格扩展

四 列表

1、作用

​ 按位置存多个值,一般用于存同种类型

列表是有序的,可变类型 存多个值

2、定义

list1 = [1, 1.2, 'a']   #list1= list([1, 1.2, 'a'] )				 

3、类型转换

但凡能够被 for 循环遍历的类型都可以当做参数传给 list( )转成列表

lsit( )底层就相当于调用了一个 for 循环

res = list('hello') #[’h','e','l','l','o']

4、内置方法

4.1 按索引取值(正向存取+反向存取):即可以取也可以改

l=[111,'egon','hello']
print(l[0]) #111
print(l[-1]) #hello
l[0]=222
print(l) #[222, 'egon', 'hello']
l[3]=333 #索引不存在会报错

4.2 切片(顾头不顾尾,步长)[ 0 : 5 : 2]

​ 切片是一种拷贝行为,新建一个列表而且相当于浅copy

l=[111,'egon','hello']
print(l[0:3]) #[111, 'egon', 'hello']
print(l[0:5:2]) # [[111, 'hello']
print(id(l)) #4502840840
new_l = l[:]
print(id(new_l)) #4502996616
print(l[0:len(l)]) #[111, 'egon', 'hello']
print(l[:]) #[111, 'egon', 'hello']

​ 补充:

​ 对于不可变类型,通过完整切片得到的新数据指向同一个内存地址

a = '123123'
b = a[:]
print(a,id(a)) #123123 4439713248
print(b,id(b)) #123123 4439713248


c = ('han', 1)
d = c[:]
print(c,id(c)) #('han', 1) 4307222088
print(d,id(d)) #('han', 1) 4307222088

4.3 成员运算 in 和 not in

print('aaa' in ['aaa', 1, 2]) #True
print(1 in ['aaa', 1, 2]) #True

4.4 在指定位置插入值 insert(索引, 元素)

​ insert:按索引插入值

l=[111,'egon','hello']
l.insert(0,'alex') 
print(l) ##['alex', 111, 'egon', 'hello']

4.5 追加元素 append (元素 )

l=[111,'egon','hello']
l.append(3333)
l.append(4444)
print(l) #[111, 'egon', 'hello', 3333, 4444]

4.6 追加多个值 extend( 可迭代对象或字符串)

​ extend(参数) #参数为可迭代对象或字符串

​ 它是将可迭代对象(或字符串)中的元素(或字母)取出再追加到调用该方法的列表中

new_l=[1,2,3]
l=[111,'egon','hello']
l.extend(new_l)
print(l) #[111, 'egon', 'hello', 1, 2, 3]
l.extend('abc')
print(l) #[111, 'egon', 'hello', 1, 2, 3, 'a', 'b', 'c']

4.7 删除 del( 索引或切片) pop(索引) remove( 元素)

​ 方式一:del(索引或切片) :通用的删除方法,不是列表独有的,只是单纯的删除,没有返回值。

l = [111, 'egon', 'hello']
del l[1]
x =del l[1] # 抛出异常,不支持赋值语法

​ 方式二:pop( 索引):根据索引删除(不指定索引默认从最后删),有返回值(返回的删除的值)

l = [111, 'egon', 'hello']
l.pop() # 不指定索引默认删除最后一个
res = l.pop()
print(res) #egon
print(l) #[111]

​ 方式三:remove(元素 ):根据元素删除,返回 None值

l = [111, 'egon', [1,2,3],'hello']
l.remove([1,2,3])
print(l) #[111, 'egon', 'hello']
res=l.remove('egon')
print(res) # None

4.8 统计长度 len( )

a = [1,'1vc', '123']
print(len(a)) #3

4.9 循环

l=[1,'aaa','bbb']
for x in l:
    l.pop()
    print(x)

结果展示:

1
aaa

4.10 统计个数 count(元素)

l = [1, 'aaa', 'bbb','aaa','aaa']
print(l.count('aaa')) #3

4.11 返回索引 index('元素')

l = [1, 'aaa', 'bbb','aaa','aaa']
print(l.index('aaa')) #1 返回找到的第一个元素索引
print(l.index('aaaaaaaaa')) # 找不到报错

4.12 清空所有 clear()

a1 = [1,4,5,7,2,3]
a1.clear()
print(a1) #[]

4.13 reverse( ):将列表倒过来

reverse修改的是原列表

a1 = [1,4,5,7,2,3]
a1.reverse()
print(a1) #[3, 2, 7, 5, 4, 1]

4.14 sort( ):排序

sort用法:列表内必须全是同一种类型才可以排序,修改的是原列表

​ 默认是升序:从小到大排,修改的是原列表

​ l.sort( reverse = True) 降序:从大到小排

a = [1,4,5,7,2,3]
a.sort()
print(a) #[1, 2, 3, 4, 5, 7] 升序
a1 = [1,4,5,7,2,3]
a1.sort(reverse=True)
print(a1) #[7, 5, 4, 3, 2, 1] 降序
l=[11,'a',12]
l.sort() #报错,元素不是同种类型
l1=['11','a','12']
l1.sort()
print(l1) #['11', '12', 'a']

​ 了解知识点:

​ 元素全为字符串可以比大小,按照 ASCIl码表的先后顺序加以区分,表中排在后面的字符大于前面的

a = 'abdc'
b = 'abcfd'
print(a > b) #True

列表也可以比大小,原理同字符串一样(按对应位置,依次 pk)注:对应的位置必须为同种类型,如果不是,比较会报错

a = [1,'ab']
b = [2]
print(b > a) True

​ 补充

​ 队列:FIFO,先进先出

l = []
#入队操作
l.append('first')
l.append('second')
l.append('third')
print(l) #['first', 'second', 'third']
#出队操作
print(l.pop(0)) #first
print(l.pop(0)) #second
print(l.pop(0)) #third


​ 堆栈:LIFO:先进后出

l = []
#入栈操作
l.append('first')
l.append('second')
l.append('third')
print(l) #['first', 'second', 'third']
#出栈操作
print(l.pop()) #third
print(l.pop()) #second
print(l.pop()) #first

五 元组

元组就是‘一个不可变的列表’,有索引,有序的, 存多个值

元组不能改:指的是不能改变元组内元素的内存地址

1、作用

​ 按照 索引/位置存放多个值,只用于读不用取

​ 当我有多个值,只有读的操作,没有取的操作就可以用元组存储,元组占的内存空间小(列表还提供取的机制,因此需要额外的内存空间存取的机制)

2、 定义

​ ()内用逗号分隔多个任意类型的元素,如果元组中没有一个元素,必须加逗号(如: ( 元素 1,) )

t = (1, 2, 'aa') #t = tuple((1,2,'aa'))
print(t, type(t)) #(1, 2, 'aa') <class 'tuple'>

x=(10) # 单独一个括号只代表包含的意思,不是元组
print(x,type(x)) #10 <class 'int'>

t1=(10,) # 如果元组中只有一个元素,必须加逗号
print(t1,type(t1)) #(10,) <class 'tuple'>

t=(1,1.3,'aa') # t=(0->值1的内存地址,1->值1.3的内存地址,2->值'aaa'的内存地址,)
t[0]=11111 #报错

t=(1,[11,22]) # t=(0->值1的内存地址,1->值[1,2]的内存地址,)
print(id(t[0]),id(t[1])) 
t[0]=111111111 # 不能改,报错
t[1]=222222222 # 不能改,报错

t[1][0]=11111111111111111 #可以改,改动是可变类型元素的子元素,可变类型元素 id 不变
# print(t)
print(id(t[0]),id(t[1]))

3、类型转换

​ 将字符串、列表、字典转换为元组类型,相当于 for 循环取值后再用元组包含。

print(tuple('hello')) #('h', 'e', 'l', 'l', 'o')
print(tuple([1,2,3])) #(1, 2, 3)
print(tuple({'a1':111,'a2':333})) #('a1', 'a2')

4、内置方法

​ 优先掌握:

4.1 按索引取值(正向取+反向取):只能取

t=('aa','bbb','cc')
print(t[0]) #aa
print(t[-1]) #cc

4.2 切片(顾头不顾尾, 步长)

t=('aa','bbb','cc','dd','eee')
print(t[0:3]) #('aa', 'bbb', 'cc')
print(t[::-1]) #('eee', 'dd', 'cc', 'bbb', 'aa')

4.3 统计长度

t=('aa','bbb','cc','dd','eee')
print(len(t)) #5

4.4 成员运算 in 和 not in

t=('aa','bbb','cc','dd','eee')
print('aa' in t) #True

4.5 循环

	t=('aa','bbb','cc','dd','eee')
	for x in t:
    print(x, end=' ') #aa bbb cc dd eee 

4.6 索引取值 index

t=(2,3,111,111,111,111)
print(t.index(111)) #t=('aa','bbb','cc','dd','eee')
print(t.index(1111111111)) # 不存在会报错

4.7 统计元素个数 count

t=(2,3,111,111,111,111)
print(t.count(t)) #4

六 字典

1、作用

​ 用途:储存多个不同类型的值

2、定义

​ { 内用逗号分隔多个 key:value, 其中 value可以是可变型,key 必须是不可变类型

字典没有索引,无序,可变类型,存多个值

Info = { } #info = dict( )

3、类型转换

​ 造字典方式一:

d={'k1':111,(1,2,3):222} # d=dict(...)
print(d['k1']) #111
print(d[(1,2,3)]) #222
print(type(d))  #<class 'dict'>
d1={} # 默认定义出来的是空字典
print(d,type(d1)) #{} <class 'dict'>

​ 造字典方式二:

d = dict(x=1, y=2 , z=3)
print(d) #{'x': 1, 'y': 2, 'z': 3}

​ 造字典方式三:

a = [['name', 'han'],['age', 18]] #列表中的元素内的子元素个数必须为2 
print(dict(a)) #{'name': 'han', 'age': 18}

a1 = [('name', 'han1'),['age', 17]] 
print(dict(a1)) #{'name': 'han1', 'age': 17}

a2 = (('name', 'han2'),['age', 16])
print(dict(a2)) #{'name': 'han2', 'age': 16}

a4 = (('name', 'han3'),('age', 20))
print(dict(a4)) #{'name': 'han3', 'age': 20}

​ 造字典方式四:快速初始化一个字典

	  d= { }.fromkeys([ 元素 1, 元素 2  ],  参数  )  :会将列表中的每个元素当做 字典的 key,参数会被当做 值 传给每个 key 对应的 value。
list1 = ['name', 'age', 'gender']
d = {}.fromkeys(list1, None)
print(d) #{'name': None, 'age': None, 'gender': None}

4、内置方法

​ 优先掌握:

1 按 key 存取值:可存可取

d={'k1':111}
# 针对赋值操作:key存在,则修改
d['k1']=222
# 针对赋值操作:key不存在,则创建新值
d['k2']=3333
print(d) #{'k1': 222, 'k2': 3333}

2 统计长度 len

d={'k1':111,'k2':2222,'k3':3333,'k4':4444}
print(len(d)) #4

3 成员运算 in 和 not in :根据 key

​ 字典的成员运算判断的是否在字典中keys中

d={'k1':111,'k2':2222}
print('k1' in d) # True
print(111 in d) #False

4 删除

​ 4.1 del 通用删除

d={'k1':111,'k2':2222}
del d['k1']
print(d) #{'k2': 2222}

​ 4.2 pop 删除

pop(key):根据 key 删除元素,有返回值,返回删除 key 对应的 value 值

必须指定 key,因为字典是无序的,没有索引

d={'k1':111,'k2':2222}
res=d.pop('k2')
print(d)  #{'k1': 111}
print(res) #2222

​ 4.3 popitem 删除

它是随机删除,没有参数,返回的是元组(key,value)

d={'k1':111,'k2':2222}
res=d.popitem()
print(res) #('k2', 2222)
print(d) #{'k1': 111}

5 键 keys( )、值 values( )、items( )

​ 在 python2 中,一般返回的都是列表(相当于鸡蛋)

​ items() :返回的值是列表套元组的方式:[ (key1, value1), (key2, value2 ) ]

在python2中
>>> d={'k1':111,'k2':2222}
>>> 
>>> d.keys()
['k2', 'k1']
>>> d.values()
[2222, 111]
>>> d.items()
[('k2', 2222), ('k1', 111)]
>>> dict(d.items())
{'k2': 2222, 'k1': 111}
>>>

​ 在 python3 中,一般返回的都是可迭代对象(相当于老母鸡),它是 python3 中的一种在内存中存取的优化,占用的内存空间非常少

>>> d={'k1':111,'k2':222}
>>> d.keys()
dict_keys(['k1', 'k2'])
>>> print(d.keys())
dict_keys(['k1', 'k2'])
>>> print(type(d.keys()))
<class 'dict_keys'>
>>> d.values()
dict_values([111, 222])
>>> d.items()
dict_items([('k1', 111), ('k2', 222)])
>>> dict(d.items())
{'k1': 111, 'k2': 222}
>>> 

6 for循环

d={'k1':111,'k2':222}
for k,v in d.items():
    print(k,v) 

​ 结果展示:

k1 111
k2 2222

d={'k1':111,'k2':222}
print(d.items()) #dict_items([('k1', 111), ('k2', 2222)])
pirnt(list(d.items)) #[('k1', 111), ('k2', 2222)]

d={'k1':111,'k2':2222}
res1 = dict(d.items())
print(d,id(d)) #{'k1': 111, 'k2': 2222} 4420553104
print(res1, id(res1)) #{'k1': 111, 'k2': 2222} 4422053960 

​ 需要掌握的:

1 clear 全部清除

d={'k1':111}
d.clear()
print(d) #{}

2、update(参数:字典类型)

​ 用新字典替换旧字典,有 key 则改对应的值,无 key 则添加键值对

d={'k1':111}
d.update({'k2':222,'k3':333,'k1':111111})
print(d) #{'k1': 111111, 'k2': 222, 'k3': 333}

3、get( ) 根据 key 取值,容错性好

​ get( ):可以指定返回值,不指定默认返回 None

d={'k1':111}
print(d['k2'])  # key不存在则报错
print(d.get('k2')) #None key 不存在返回 None
print(d.get('k1')) # 111
print(d.get('k2', '目标不存在'))#目标不存在,返回指定值

4、setdefault(key, value )

​ 1)有 key 则不添加,返回字典中对应value 值

info={'name':'egon'}
res=info.setdefault('name','alex')
print(res) #egon
print(info) #{'name': 'egon'}

​ 2)key 不存在时则添加,返回新增的value值 ,且字典新增键值对

info={'name':'egon'}
res=info.setdefault( 'age', 18)
print(res) #18
print(info) #{'name': 'egon', 'age': 18}

七 集合

1、什么是集合

​ 可以存多个值,不是用来取单个值使用的,它是将所有值放到一起,整体去使用,主要用于:去重和运算。

它是无序的,可变类型(不可修改,可增删),存多个值

​ 1.1 关系运算

l1 = ['han','egon','tank']
l2 = ['han', 'alex', 'sean']
l3 = []
for i in l1:
    if i in l2:
        l3.append(i)
print(l3) #['han']

2、定义

​ 在{ }内用多个逗号分隔来多个元素,多个元素满足以下三个条件

1、集合内元素必须为不可变类型(指的是被去重对象取出的元素必须为不可变类型)

2、集合内元素无序

3、集合元素没有重复

注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值

s = set()#空集合
s = {1,[1,23] }#报错,集合内元素必须为不可变类型
s = {1,1,'a','b'} 
print(s) #{1,'a','b'} 去重了

s = {1,'c',2,'b'}
print(s,type(s)) #{1, 2, 'c', 'b'} <class 'set'> #无序的

l = [{'name':'egon'}, {'name':'alex'}]
print(set(l))# 报错

3、类型转换

res = set('hello world')
print(res) #{'e', 'o', ' ', 'w', 'h', 'r', 'l', 'd'}

res1 = [1,1,2,[22,11]]
print(set(res1)) #报错

res2 = {'name':'han','age':18}
print(set(res2))#{'age', 'name'}

res3 = ('han','123','egon','123')
print(set(res3))#{'123', 'egon', 'han'}

4、内置方法

​ 关系运算

l1 = {'han','egon','tank','jason'}
l2 = {'han', 'alex', 'sean','jason'}

1、取交集

res = l1 & l2
print(res) #{'han', 'jason'}
print(l1.intersection(l2))

2、取并集/合集:两者所有的好友

print(l1 | l2) #{'egon', 'sean', 'tank', 'han', 'jason', 'alex'}
print(l1.union(l2))

3、取差集:取l1 独有的好友
取差集:取l2 独有的好友

print(l1-l2) #{'tank', 'egon'}
print(l1.different(l2))

print(l2 - l1) #{'sean', 'alex}
print(l2.difference(l1))

4、对称差集: 两个集合独有的元素(即去掉共同元素)

print(l1 ^ l2) #{'tank', 'alex', 'egon', 'sean'}
print(l1.symmetric_difference(l2))

5、父子集:包含关系

s1 = {'a', 'b', 'c'}
s2 = {'a', 'b', 'd'}
s3 = {'a', 'b'}
print(s1 >= s2) #False  当s1大于或等于s2时,才能说是s1是s2他爹
print(s1.issuperset(s2))
print(s1 >= s3) #True

s1={1,2,3}
s2={1,2,3}
print(s1 == s2) # s1与s2互为父子
print(s1.issuperset(s2))
print(s2.issuperset(s1))

6、对于可变类型的元素去重方式

# 去重
l=[
    {'name':'egon','age':18,'sex':'male'},
    {'name':'alex','age':73,'sex':'male'},
    {'name':'egon','age':20,'sex':'female'},
    {'name':'egon','age':18,'sex':'male'},
    {'name':'egon','age':18,'sex':'male'},
]  
# print(set(l)) #报错:unhashable type: 'dict'
s=set()
l1=[]
for item in l:
    val=(item['name'],item['age'],item['sex'])
    if val not in s:
        s.add(val)
        l1.append(item)

print(l1)

其他内置方法

需要掌握:

1 discard 删除

​ 1)当元素不存在时,不做动作

​ 3)当元素存在时,删除 元素,无返回值

s={1,2,3}
s.discard(4) # 删除元素不存在do nothing
print(s) #{1, 2, 3}
s.discard(3)
print(s) #{1, 2}
s.remove(4) # 删除元素不存在则报错

2 update 取两个集合的并集重新赋给该集合

s={1,2,3}
print(s.update({1,3,5})) #None
print(s) #{1, 2, 3, 5}

3 pop 随机删除

s={1,2,3}
res=s.pop()
print(res) #{1,2}

4 add 添加元素

s={1,2,3}
s.add(4)
print(s) #{1,2,3,4}

了解:

​ 1 isdisjoint ( )

​ 判断两个集合是否有交集部分

​ 当两个集合完全独立,没有交集,返回 True

s = {1,2,3}
res=s.isdisjoint({4,5,6}) # 两个集合完全独立、没有共同部分,返回True
print(res) #True
res= s.isdisjoint({3,4,6})#False

​ 2 difference( ) difference_update( )

difference:取该集合独有的部分(减去两集合的交集)

s = {1,'aa',4, 6}
print(s.difference({'aa',4,5})) #{1, 6} 
print(s) #{1,4,6,'aa'}

​ difference_update:取该集合的(减去两个集合相交的部分)的独有部分重新赋值给该集合。

s = {1,'aa',4, 6}
print(s.difference_update({4, 5})) #None
print(s)#{1, 'aa', 6}

八 总结与分类

​ 有序 or 无序:有序 又称之为序列类型

​ 存一个值 or 多个值:存一个值称之为原子类型,存多个值称之容器类型

​ 可变 or 不可变

1 按存值个数区分

​ 只能存一个值:可称为标量/原子类型 如:数字、字符串

​ 可以存放多个值:可以称为容器类型 如:列表、元组、字典

2 按照访问方式区分

​ 直接访问:只能通过变量访问整个值 如:数字

​ 顺序访问:可以索引访问指定的值,索引代表顺序、又称为序列类型 如字符串、列表、元组

​ key 访问:可以用 key 访问指定的值、又称映射类型 如:字典

3 按照可变不可变区分

可变类型 如:列表、字典 、集合

不可变类型 如:字符串 、元组

按存储空间的占用分(从低到高)

数字
字符串
集合:无序,即无需存索引相关信息
元组:有序,需要存索引相关信息,不可变
列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改

原文地址:https://www.cnblogs.com/xy-han/p/12459247.html