Python-基础04-数据类型

2022-09-26 11:38:27 浏览数 (1)

  • 数据类型
  • 数据类型总结

-曾老湿, 江湖人称曾老大。


-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。


数据类型

1 什么是数据?

x=10,10是我们要存储的数据

2 为何数据要分不同的类型

数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示

3 数据类型

数字(整形,长整形,浮点型,复数)

字符串

字节串:在介绍字符编码时介绍字节bytes类型

列表

元组

字典

集合

4 按照以下几个点展开数据类型的学习

代码语言:javascript复制
#======================================基本使用======================================
#1、用途

#2、定义方式

#3、常用操作 内置的方法

#======================================该类型总结====================================
#存一个值or存多个值
    
#有序or无序
有序:但凡有索引的数据都是有序的

#可变or不可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)
可变类型:在值变了的情况下,id不变,证明在改原值
不可变类型:在值变了的情况下,id也跟着变了,证明不是在改变原值

数字类型

整型:int 1.用途 记录年龄、等级、号码。

2.定会方式 age=18 #age=int(18) int除了造整型的功能,还可以转换。只转换纯数字

代码语言:javascript复制
#报错
int('zls')

#报错
int('10.1')

#成功
int('10')

进制数

代码语言:javascript复制
#二进制:0,1
10 #1*(2**1)   0*(2**0)
#十进制:0-9
10 #1*(10**1) 0*(10**0)
#八进制:0-7
10 #1*(8**1) 0*(8**0)
#十六进制:0-9 A-F
10 #1*(16**1) 0*(16**0)

整数取余法,将十进制转成其他进制

python内置的方法

代码语言:javascript复制
#转成二进制
print(bin(12))
#转成八进制
print(oct(12))
#转成十六进制
print(hex(12))

3.常用操作 内置方法

4.存一个值or多个值 一个值

5.有序or无序 根本没有有序 无序,就是一个值

6.可变or不可变

代码语言:javascript复制
x=10
print(id(x))

x=11
print(id(x))

#结果
4304951968
4304952000

值变了,id也变了,所以int类型是不可变类型

浮点型:float

1.用途 记录身高、体重、薪资

2.定义方式 salary=3.1 #salary=float(3.1)

3.常用操作 内置方法

4.存一个值or多个值 一个值

5.有序or无序

6.可变or不可变

代码语言:javascript复制
x=1.1
print(id(x))

x =1.2
print(id(x))

#结果
4325908888
4325908672

字符串类型

1.用途 记录描述性的状态,比如人的名字、地址、性别

2.定义方式 在'','''''',"",""""""内包含的一系列字符 msg='hello' 除了创造类型,还可以转换,可以将所有类型都转成字符串

代码语言:javascript复制
res1=str(1)
res2=str([1,2,3])
print(type(res1),type(res2))

3.常用操作 内置方法 优先掌握

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

代码语言:javascript复制
#正向取
msg='hello world'

print(msg[0])
print(msg[1])
print(msg[2])
print(msg[3])
print(msg[4])
print(msg[5])

#反向取
msg='hello world'

print(msg[-1])
print(msg[-2])
print(msg[-3])
print(msg[-4])
print(msg[-5])

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

代码语言:javascript复制
#默认不步长
msg='hello world'

print(msg[0:5])
print(msg[6:-1])

msg='hello world'

print(msg[:5])
print(msg[6:])

#指定步长
msg='hello world'

print(msg[0:5:1])
print(msg[6:-1:2])

msg='hello world'

print(msg[0:5:-1])
print(msg[5:0-1])
print(msg[-1::-1])
print(msg[::-1])

3)长度len

代码语言:javascript复制
msg='hello world'

print(len(msg))

4)成员运算in和not in

代码语言:javascript复制
# in
msg='zls is a nice boy'

print('zls' in msg)
print('bgx' in msg)


# not in
msg='zls is a nice boy'

print('bgx' not in msg)
print(not 'bgx' in msg)

5)移除空白strip(去除字符串左右两边的字符)

代码语言:javascript复制
user='         zls         '
print(user.strip(' '))
print(user.strip())


user='      x   zls         '
print(user.strip())


user='*********zls***********'
print(user.strip('*'))


user='****/* * **zls***=** ******'
print(user.strip('/ * ='))

思考:

代码语言:javascript复制
user=input('>>>:')
if user == 'zls':
    print('用户名正确')

6)切分split

代码语言:javascript复制
#取出用户密码,用切片
msg='root:123:0:0::/root:/bin:/bash'
print(msg[5:8])

#使用切分取出用户密码
msg='root:123:0:0::/root:/bin:/bash'
res=msg.split(':')
print(res[1])

#取出文件名
dirct='/usr/local/src/a.txt
res=dirct.split('/')
print(res[4])

7)循环

代码语言:javascript复制
msg='hello'

for item in msg:
    print(item)

需要掌握

1)strip,lstrip,rstrip

代码语言:javascript复制
msg='*************zls**********'

print(msg.strip('*'))
print(msg.lstrip('*'))
print(msg.rstrip('*'))

2)lower,upper

代码语言:javascript复制
#全变小写
msg='*************zLs ZHEN shuai**********'
print(msg.lower())
print(msg)

#全变大写
msg='*************zLs ZHEN shuai**********'
print(msg.upper())
print(msg)

3)startswith,endswith

代码语言:javascript复制
msg='zls is a nice boy'
print(msg.startswith('zls'))
print(msg.endswith('zls'))

print(msg.endswith('boy'))
print(msg.endswith('oy'))
print(msg.endswith('y'))

4)format的三种玩法

代码语言:javascript复制
1.玩法一
msg="my name is {name} ,I'm {age} years old"
print(msg.format(name='zls',age=18))

2.玩法二
msg="my name is {} ,I'm {} years old"
print(msg.format('zls',18))

3.玩法三
msg="my name is {0} ,I'm {1}{1} years old"
print(msg.format('zls',18))

5)split,rsplit

代码语言:javascript复制
#指定切分个数
dirct='/usr/local/src/a.txt'
print(dirct.split('/',1))

#如果不指定个数,split和rsplit一样
dirct='/usr/local/src/a.txt'
print(dirct.split('/'))
print(dirct.rsplit('/'))

#指定个数就不一样了
dirct='/usr/local/src/a.txt'
print(dirct.split('/',1))
print(dirct.rsplit('/',1))

6)join

代码语言:javascript复制
dirct='/usr/local/src/a.txt'
l=dirct.split('/')
msg='/'.join(l)
print(msg)

7)replace

代码语言:javascript复制
msg='alex say i have one tesla,alex is hahaha'
print(msg.replace('alex','xxx'))

8)isdigit

代码语言:javascript复制
print('10'.isdigit())
print('10.1'.isdigit())

#应用场景,判断是不是纯数字
age=input('>>>:')

if age > 30:
    print('too big')
elif age < 30:
    print('too small')
else:
    print('you got it')

#上面写法会报错,因为input的是字符串
age=int(input('>>>:'))

if age > 30:
    print('too big')
elif age < 30:
    print('too small')
else:
    print('you got it')

#如果按照上面的写,问题又来了,用户会老老实实写数字么?
age=input('>>>:')

if age.isdigit():
    age=int(age)
    if age > 30:
        print('too big')
    elif age < 30:
        print('too small')
    else:
        print('you got it')
else:
    print('必须输入数字')

其他了解

1)find,rfind,index,rindex,count

代码语言:javascript复制
#find 从左边找
msg='zls is a nice boy'

print(msg.find('zls'))
print(msg.find('zls',5,7))

#index 查询索引
msg='zls is a nice boy'

print(msg.index('zls'))
print(msg.index('zls',7,8))

#rfind 从右边找
msg='hello zls is a nice boy'
print(msg.rfind('zls'))

#count 查询数量
msg='hello zls is a nice boy'
print(msg.count('zls'))

2)center,ljust,rjust,zfill

代码语言:javascript复制
#center 居中
print('zls'.center(50,'*'))
#ljust 左对齐
print('zls'.ljust(50,'*'))
#rjust 右对齐
print('zls'.rjust(50,'*'))
#zfill 0填充
print('zls'.zfill(50))

3)expandtabs

代码语言:javascript复制
print('zlsnshuai')
print('zlstshuai')
print('zlstshuai'.expandtabs(10))

4)captalize,swapcase,title

代码语言:javascript复制
#captalize 首字母大写
print('hello'.capitalize())
#swapcase 大小写转换
print('Hello'.swapcase())
#title 首字母大写
print('heLLo'.title())

5)is数字系列

代码语言:javascript复制
#在python3中
num1=b'4' #bytes
num2=u'4' #unicode,python3中无需加u就是unicode
num3='四' #中文数字
num4='Ⅳ' #罗马数字

#isnumeric
print(num1.ismueric())
print(num2.ismueric())
print(num3.ismueric())
print(num4.ismueric())
#总结:Unicode,中文数字,罗马数字


#isdecimal
print(num1.isdecimal())
print(num2.isdecimal())
print(num3.isdecimal())
print(num4.isdecimal())
#总结:只能识别Unicode


#isdigit
print(num1.isdigit())
print(num2.isdigit())
print(num3.isdigit())
print(num4.isdigit())
#总结:能识别bytes类型,Unicode

6)is其他

代码语言:javascript复制
#isalnum 字母或数字,中文字符
print('abc'.isalnum())
print('123'.isalnum())
print('abc12'.isalnum())
#isalpha 字符串中包含的是纯字母、中文
print('abc'.isalpha())

4.存一个值or多个值 存一个值

5.有序or无序 有序

6.可变or不可变 不可变

代码语言:javascript复制
x='zls'
print(id(x))
x='zls a'
print(id(x))

列表类型

1.用途 存放多个值,可以根据索引存取值。

2.定义方式 在[]内用逗号分隔开,多个任意类型的值。 除了创造值以外,还可以转换类型。类似于调用for循环 能被for循环的数据类型,一定可以被列表转换。

代码语言:javascript复制
#转换字符串
l1=list('hello')
print(l1)

#转换字典
l2=list({'x':1,'y':2,'z':3})
print(l2)

3.常用操作 内置的方法

优先掌握 1)按索引存取值(正向存取 反向存取):即可存也可以取

代码语言:javascript复制
#列表可以改值,超过索引会报错,只能根据已经存在的索引去改值
l=['zls','bgx','oldboy']
print(l[0])
l[0]='ZLS'
print(l[0])

l=[1,2,3,4,5,6]

#正向步长
l[0:3:1] #[1, 2, 3]
#反向步长
l[2::-1] #[3, 2, 1]
#列表翻转
l[::-1] #[6, 5, 4, 3, 2, 1]

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

代码语言:javascript复制
l=['zls','bgx','oldboy']
print(l[0:2])
print(l[0:2:2])

#翻转列表
l=['zls','bgx','oldboy']
print(l[::-1])

3)长度

代码语言:javascript复制
l=['zls','bgx','oldboy']
print(len(l))

4)成员运算in和not in

代码语言:javascript复制
l=['zls','bgx','oldboy']
print('zls' in l)
print('123' in l)

5)追加

代码语言:javascript复制
#追加
l=['zls','bgx','oldboy']
l.append(123)
print(l)

#插入
l=['zls','bgx','oldboy']
l.insert(1,'alex')
print(l)
l.insert(0,'egon')

6)删除

代码语言:javascript复制
#del
l=['zls','bgx','oldboy']
del l[1]
print(l)

#remove 指定要删除的值,返回None
l=['zls','bgx','oldboy']
res=l.remove('zls')
print(l,res)

#pop 指定索引删除,默认从末尾删,有返回值
l=['zls','bgx','oldboy']
res=l.pop(-1)
print(l,res)

7)循环

代码语言:javascript复制
l=['zls','bgx','oldboy']

for item in l:
    print(item)

需要掌握

代码语言:javascript复制
#count 判断重复元素个数
l=['zls','zls','bgx','oldboy']
print(l.count('zls'))

#index查找索引
l=['zls','zls','bgx','oldboy']
print(l.index('bgx'))

#extend 没有返回值
l=['zls','zls','bgx','oldboy']
l.extend(['a','b','c'])
print(l)

#reverse 翻转
l=['zls','zls','bgx','oldboy']
l.reverse()
print(l)

#sort 排序,但是不能夸类型排序
l=['1','-1','100','8']
l.sort()
print(l)

l=['1','-1','100','8']
l.sort(reverse=True)
print(l)

4.存一个值or存多个值 多个值

5.有序or无序 有序

6.可变or不可变 可变

代码语言:javascript复制
l=['1','-1','100','8']
print(id(l))
l.append('10')
print(id(l))

小练习

队列: 先进,先出

入队

代码语言:javascript复制
l=[]
l.append('first')
l.append('second')
l.append('third')
print(l)

出队

代码语言:javascript复制
l.pop(0)
l.pop(0)
l.pop(0)

print(l)

堆栈: 先进,后出 后进,先出

入栈

代码语言:javascript复制
l=[]

l.append('first')
l.append('second')
l.append('third')

出栈

代码语言:javascript复制
l.pop()
l.pop()
l.pop()

元组类型

元组:tuple 1.用途 记录多个值,当多个值没有修改的需求,此时用元组更合适

2.定义方式 在()内,用逗号分隔开,多个任意类型的值

代码语言:javascript复制
t=(1,1.3,('a','b'),[1,2],'zls')
print(t,type(t))

3.常用操作 内置的方法

优先掌握

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

代码语言:javascript复制
t=(1,1.3,('a','b'),[1,2],'zls')
print(t[0])

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

代码语言:javascript复制
t=(1,1.3,('a','b'),[1,2],'zls')
print(t[0:3])
print(t[0:3:2])

3)长度

代码语言:javascript复制
t=(1,1.3,('a','b'),[1,2],'zls')
print(len(t))

4)成员运算in和not in

代码语言:javascript复制
t=(1,1.3,('a','b'),[1,2],'zls')
print('zls' in t)
print('zls' not in t)
print('123' not in t)

5)循环

代码语言:javascript复制
t=(1,1.3,('a','b'),[1,2],'zls')
for item in t:
    print(item)

需要掌握

代码语言:javascript复制
#count
t=(1,1.3,('a','b'),[1,2],'zls')
res=t.count('a')
print(res)

#index
t=(1,1.3,('a','b'),[1,2],'zls')
res=t.index(1.3)
print(res)

t=(1,1.3,('a','b'),[1,2],'zls')
res=t.index(1.3,2,5)
print(res)

4.存一个值or存多个值 多个值,在存放多个值的情况下 ,元组比列表更省空间

5.有序or无序 有序

6.可变or不可变 不可变,id不会变(图解)


字典类型

可变类型:不可hash类型 不可变类型:可hash类型

1.用途 用来记录多个值,每一个值都对应的key用来描述value的作用

2.定义方式 在{}内,用逗号分隔开,多个key:value,其中value可以是任意类型,但是key必须是不可变的类型

代码语言:javascript复制
#这么去定义????
dic={0:'aaa',1:'bbb',2:'ccc'}
print(dic,type(dic))
print(dic[0])

转换类型:

代码语言:javascript复制
#字符串转换
dic=dict(x=1,y=2,z=3)
print(dic)

#列表转换
userinfo=[
    ['name','zls'],
    ['age',18],
    ['sex','male']
]


dic=dict(userinfo)
print(dic)

方法二:

userinfo=[
    ['name','zls'],
    ['age',18],
    ['sex','male']
]


dic={}
for item in userinfo:
    #print(key,value)
    dic[item[0]]=item[1]
print(dic)

   
方法三:
userinfo=[
    ['name','zls'],
    ['age',18],
    ['sex','male']
]


dic={}
for key,value in userinfo:
    #print(key,value)
    dic[key]=value
print(dic)

3.常用操作 内置的方法

优先掌握

1)按key存取值:可存可取

代码语言:javascript复制
#取
dic={'name':'zls'}
print(dic['name'])

#修改
dic={'name':'zls'}
print(dic['name'])

dic['name']='ZLS'
print(dic)

#添加,列表做不到
dic={'name':'zls'}
dic['age']=18
print(dic)

2)长度len

代码语言:javascript复制
#key:value的个数,也可以理解为key的个数,自动去重
dic={'name':'zls','age':18}
print(len(dic))

3)成员运算in和not in

代码语言:javascript复制
#判断的是key
dic={'name':'zls','age':18}
print(18 in dic)
print('name' in dic)

4)删除

代码语言:javascript复制
#del通用
dic={'name':'zls','age':18}
del dic['name']
print(dic)

#clear清空
dic={'name':'zls','age':18}
dic.clear()
print(dic)

#pop
dic={'name':'zls','age':18}

res=dic.pop('age')
print(dic,res)


#popitem随机删除,并且有返回值
dic={'name':'zls','age':18}

dic.popitem()
print(dic)

5)键keys(),值values(),键值对items()

代码语言:javascript复制
#在python2中
MacBook-Pro:bin driverzeng$ python
Python 2.7.10 (default, Aug 17 2018, 17:41:52)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> dic={'name':'zls','age':18}
>>> dic.keys()
['age', 'name']
>>> dic.values()
[18, 'zls']
>>> dic.items()
[('age', 18), ('name', 'zls')]


#python3中
dic={'name':'zls','age':18}

print(dic.keys())
print(dic.values())
print(dic.items())

#像python2中查看python3
l=[]
dic={'name':'zls','age':18}

for k in dic.keys():
    l.append(k)
print(l)

------------

dic={'name':'zls','age':18}
print(list(dic.keys()))
print(list(dic.values()))
print(list(dic.items()))

6)循环

代码语言:javascript复制
dic={'name':'zls','age':18}
for k in dic.keys():
    print(k)

for v in dic.values():
    print(v)

for k,v in dic.items():
    print(k,v)

7.取值get

代码语言:javascript复制
#key不存在不会报错
dic={'name':'zls','age':18}
print(dic.get('name'))

需要掌握

代码语言:javascript复制
#fromkeys
dic={}
l=['name','age','sex']
dic=dic.fromkeys(l,None)
print(dic)


#setdefault有则不动(返回已经存在的key对应的value),无则添加(返回新value)
d={'name':'ZLS','x':1,'y':2}
d.setdefault('name','zls')
d.setdefault('sex','male')
print(d)


#update
od={'name':'zls','age':18}
d={'name':'ZLS','x':1,'y':2}
print(od)
od.update(d)
print(od)

4.存一个值or存多个值 存多个值

5.有序or无序 无序

6.可变or不可变 可变


小练习

代码语言:javascript复制
1 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中

即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
代码语言:javascript复制
2 统计s='hello alex alex say hello sb sb'中每个单词的个数

结果如:{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2}

集合类型

引入场景:老男孩教育上海校区有两门课程,python和linux

代码语言:javascript复制
#报名python和Linux的学生
pythons=['egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕']
linuxs=['oldboy','bgx','alex','陈独秀','赵铁柱','李二丫']

#如何判断哪个学生同时报了两门课程
pythons=['egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕']
linuxs=['oldboy','bgx','alex','陈独秀','赵铁柱','李二丫']

l=[]

for stu in pythons:
    if stu in linuxs:
        l.append(stu)
print(l)

1.用途 1)用来做关系运算 2)去重

2.定义方式 在{}内用逗号分隔开的多个值 1)每一个值都必须是不可变类型 2)元素不能重复 3)无序

代码语言:javascript复制
s={'a','b''c','d'}

转换类型:

代码语言:javascript复制
s='hello'
print(set(s))

3.常用操作 内置的方法

优先掌握

1)长度len

代码语言:javascript复制
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(len(pythons),len(linuxs))

2)成员运算in和not in

代码语言:javascript复制
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print('zls' in pythons)
print('zls' in linuxs)
print('oldboy' not in pythons)

3)|合集

代码语言:javascript复制
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(pythons|linuxs)

4)&交集

代码语言:javascript复制
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(pythons&linuxs)

5)-差集

代码语言:javascript复制
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(linuxs-pythons)
print(pythons-linuxs)

6)对称差集

代码语言:javascript复制
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(linuxs^pythons)
print(pythons^linuxs)

7)==

代码语言:javascript复制
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(linuxs == pythons)
print(pythons == linuxs)

8)父集:>,>=

代码语言:javascript复制
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(linuxs >= pythons)
print(pythons > linuxs)

9)子集:<,<=

代码语言:javascript复制
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(linuxs <= pythons)
print(pythons < linuxs)

需要掌握

代码语言:javascript复制
#交集
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(pythons.intersection(linuxs))
print(pythons&linuxs)

#并集
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(pythons.union(linuxs))
print(pythons|linuxs)

#差集
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(pythons.difference(linuxs))
print(pythons-linuxs)

#对称差集
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(pythons.symmetric_difference(linuxs))
print(pythons^linuxs)

#父集
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(pythons.issuperset(linuxs))
print(pythons>=linuxs)

#子集
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

print(pythons.issubset(linuxs))
print(pythons<=linuxs)

#update(一定要加大括号,否则...)
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

pythons.update('zls')
print(pythons)

pythons.update({'zls'})
print(pythons)

#pop随机删除,有返回值
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

res=pythons.pop()
print(pythons,res)

#remove指定元素删除,没有返回值
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

res=pythons.remove('alex')
print(pythons,res)

#add添加一个值,没有返回值
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

res=pythons.add('zls')
print(pythons,res)

#difference_update求出差集 并赋值给pythons集合
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

pythons=pythons.difference(linuxs)
print(pythons)

pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

pythons.difference_update(linuxs)
print(pythons)

#discard ,同样是删除,并且没有返回值,但是相比remove 元素不存在,不报错
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

res=pythons.discard('alex')
print(pythons,res)

#isdisjoint如果两个集合没有交集则返回True
pythons={'egon','alex','张3','李4','王5','赵铁柱','李二丫','蔡徐坤','徐根硕'}
linuxs={'oldboy','bgx','alex','陈独秀','赵铁柱','李二丫'}

res=pythons.isdisjoint(linuxs)
print(res)

4.存一个值or存多个值 存多个值

5.有序or无序 无序

6.可变or不可变 可变

去重用法

代码语言:javascript复制
names=['zls','oldboy','oldboy','zls','bgx','123']
print(set(names))

#存在问题
1.列表变成了集合
2.顺序乱了

#变回列表
names=['zls','oldboy','oldboy','zls','bgx','123']
s=set(names)
l=list(s)
print(l)
#但是顺序还是乱了

#如果数据是字典
stu_info=[
    {'name':'zls','age':18},
    {'name':'bgx','age':73},
    {'name':'bgx','age':73},
    {'name':'bgx','age':73},
    {'name':'zls','age':18},
    {'name':'oldboy','age':84},
    {'name':'oldboy','age':84}
]

set(stu_info)


#局限性:
1.无法保证元数据类型的顺序
2.当某一个数据类型中包含的多个值,全部为不可变类型时,才能用集合去重

#如何去重?
stu_info=[
    {'name':'zls','age':18},
    {'name':'bgx','age':73},
    {'name':'bgx','age':73},
    {'name':'bgx','age':73},
    {'name':'zls','age':18},
    {'name':'oldboy','age':84},
    {'name':'oldboy','age':84}
]

l=[]

for info in stu_info:
    if info not in l:
        l.append(info)

print(l)
stu_info=l
print(stu_info)

数据类型总结

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

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

按存值个数区分

标量/原子类型

数字、字符串

容器类型

列表、原子、字典


按可变不可变区分

可变

列表、字典

不可变

数字、字符串、元组


按访问顺序区分

直接访问

数字

顺序访问(序列类型)

字符串、列表、元组

key值访问(映射类型)

字典

0 人点赞