集合的操作:
增加数据add()语法: set.add()注意:因为集合有去重功能,所以,当向集合内追加数据是当前集合已有数据的话, 则不进行任何操作例如:s1 = {10,20} s1.add(100) s1.add(10) print(s1) # {100, 10, 20} update():语法: set.update(list)注意: 追加的数据是序列例如:s1 = {10, 20} # s1.update(100) # 报错 s1.update([100, 200]) s1.update('abc') print(s1) # {'c', 100, 'a', 200, 10, 20, 'b'}
删除数据remove()语法: set.remove()注意: 删除集合中的指定数据,如果数据不存在则报错例如:s1 = {10, 20} s1.remove(10) print(s1) # {20} s1.remove(10) print(s1) # 报错 discard()语法: set.discard()注意: 删除集合中的指定数据, 如果数据不存在也不会报错例如:s1 = {10, 20} s1.discard(10) print(s1) s1.discard(10) print(s1) pop()语法: set.pop()注意: 随机删除集合中的某个数据,并返回这个数据例如:s1 = {10, 20, 30, 40 ,50} del_num = s1.pop() print(del_num) print(s1)
查找数据in : 判断数据在集合序列not in :判断数据不在集合序列例如:s1 = {10, 20, 30, 40, 50} print(10 in s1) print(10 not in s1)
公共操作
运算符
运算符描述支持的容器类型+合并字符串、列表、元组*复制字符串、列表、元组in元素是否存在字符串、列表、元组、字典、集合not in元素是否不存在字符串、列表、元组、字典、集合
例如:
# +# 1. 字符串str1 ='aa'str2 ='bb'str3 = str1 + str2print(str3)# aabb# 2. 列表list1 = [1, 2]list2 = [10, 20]list3 = list1 + list2print(list3)# [1, 2, 10, 20]# 3. 元组t1 = (1, 2)t2 = (10, 20)t3 = t1 + t2print(t3)# (10, 20, 100, 200)# * # 1. 字符串print('-'* 10)# ----------# 2. 列表list1 = ['hello']print(list1 * 4)# ['hello', 'hello', 'hello', 'hello']# 3. 元组t1 = ('world',)print(t1 * 4)# ('world', 'world', 'world', 'world')# in 或 not in # 1. 字符串print('a'in'abcd')# Trueprint('a'notin'abcd')# False# 2. 列表list1 = ['a','b','c','d']print('a'inlist1)# Trueprint('a'notinlist1)# False# 3. 元组t1 = ('a','b','c','d')print('aa'int1)# Falseprint('aa'notint1)# True
公共方法
函数描述len()计算容器中元素个数del 或 del()删除max()返回容器中元素最⼤值min()返回容器中元素最⼩值range(start, end, step)⽣成从start到end的数字,步⻓为 step,供for循环使⽤enumerate()函数⽤于将⼀个可遍历的数据对象(如列表、元组或字符串)组合为⼀个索引序 列,同时列出数据和数据下标,⼀般⽤在 for 循环当中
例如:
# len()# 1. 字符串str1 ='abcdefg'print(len(str1))# 7# 2. 列表list1 = [10,20,30,40]print(len(list1))# 4# 3. 元组t1 = (10,20,30,40,50)print(len(t1))# 5# 4. 集合s1 = {10,20,30}print(len(s1))# 3# 5. 字典dict1 = {'name':'Rose','age':18}print(len(dict1))# 2# del()# 1. 字符串str1 ='abcdefg'delstr1print(str1)# 2. 列表list1 = [10,20,30,40]del(list1[0])print(list1)# [20, 30, 40]# max()# 1. 字符串str1 ='abcdefg'print(max(str1))# g# 2. 列表list1 = [10,20,30,40]print(max(list1))# 40# min()# 1. 字符串str1 ='abcdefg'print(min(str1))# a# 2. 列表list1 = [10,20,30,40]print(min(list1))# 10# range() -- range()生成的序列不包含end数字# 1 2 3 4 5 6 7 8 9foriinrange(1,10,1): print(i)# 1 3 5 7 9foriinrange(1,10,2): print(i)# 0 1 2 3 4 5 6 7 8 9foriinrange(10): print(i)# enumerate() -- enumerate(可遍历的对象, start=0)list1 = ['a','b','c','d','e']foriinenumerate(list1): print(i)forindex, charinenumerate(list1, start=1): print(f'下标是{index}, 对应的字符是{char}')
容器类型的转换
tuple()作用: 将某个序列转换成元组例如list1 = [10, 20, 30, 40, 50, 20] s1 = {100, 200, 300, 400, 500} print(tuple(list1)) print(tuple(s1))
list()作用: 将某个序列转换成列表例如:t1 = ('a', 'b', 'c', 'd', 'e') s1 = {100, 200, 300, 400, 500} print(list(t1)) print(list(s1))
set()作用: 将某个序列转换成集合例如:list1 = [10, 20, 30, 40, 50, 20] t1 = ('a', 'b', 'c', 'd', 'e') print(set(list1)) print(set(t1)) # 1. 集合可以快速的完成列表去重 # 2. 集合不支持下标
推导式 -- 生成式
列表推导式作用:用一个表达式创建一个有规律的列表或控制一个有规律列表例如:# while 循环实现 # 1. 准备一个空列表 list1 = [] # 书写循环,依次追加数字到空列表list1中 i = 0 while i < 10: list1.append(i) i += 1 print(list1) # for 循环实现 list1 = [] for i in range(10): list1.append(i) print(list1) # 列表推导式实现 list1 = [i for i in range(10)] print(list1) # 带if的列表推导式 # 方法一: range()步长实现 list1 = [i for i in range(0,10,2)] print(list1) # 方法二: 带if的列表推导式 list1 = [i for i inrange(10) if i % 2 == 0] print(list1) # 多个for循环实现列表推导式 list1 = [(i, j)fori in range(1, 3)for j in range(3)] print(list1)
字典推导式作用: 快速合并列表为字典或提取字典中的目标数据例如:# 1. 创建一个字典:字典的key是1-5数字, value是这个数字的平方 dict1 = {i:i**2 for i in range(1, 5)} print(dict1) # {1: 1, 2: 4, 3: 9, 4: 16} # 2. 将两个列表合并为一个字典 list1 = ['name', 'age', 'gender'] list2 = ['Tom', 20, 'man'] dict1 = {list1[i]: list2[i] for i inrange(len(list1))} print(dict1) # 3. 提取字典中的目标数据 counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99} # 需求: 提取上述电脑数量大于等于200的字典数据 count1 = {key: value for key, value in counts.items() if value >= 200} print(count1) # {'MBP':268, 'DELL': 201}
集合推导式作用: 快速生成集合,集合有数据去重功能例如:# 创建一个集合, 数据为下方列表的2次方 list1 = [1, 1, 2] list1 = [1, 1, 2] set1 = {i ** 2 for i in list1} print(set1) # {1, 4}
Python中的小整数对象池和大整数对象池,以及“is” 和“==”的区别
Python是一门弱变量类型语言,变量使用之前无需声明变量的类型。对于一个变量有三个属性:id(内存地址),type(变量类型),value(值)
对于=, == , is的区别:= 赋值操作,传递的是id, type, value== 判断的是value是否相等is 判断id是否相等
小整数对象池对于小整数对象使用了对象池技术。设置小整数的范围为[-5,256]。在这个范围内的小整数,任意相同的整数都是同一个对象,同理,单个字母也是这样的小整数的缓冲池是在Python初始化的时候被创建的intern机制处理空格一个单词的复用机会大,所以创建一次,有空格创建多次,但是字符串长度大于20,就不是创建一次了a = -5 b = -5 a is b # True a = 256 b = 256 a is b # True a = 1000 b = 1000 a is b # True a = 'abc' b = 'abc' a is b # True a = 'helloworld' b = 'helloworld' a is b # True a = 'hello world' b = 'hello world' a is b # False
大整数对象池超出小整数的范围即为大整数,每次都会创建一个新的对象。但是处于一个代码块的大整数是同一个对象。终端是每次执行一次,所以每次的大整数都重新创建,而在pycharm中,每次运行是所有代码都加载都内存中,属于一个整体,所以这个时候会有一个大整数对象池,即处于一个代码块的大整数是同一个对象在pycharm中,每次运行是所有代码都加载都内存中,属于一个整体,所以这个时候会有一个大整数对象池,即处于一个代码块的大整数是同一个对象a = 1000 b = 1000 a is b # False a = -1888 b = -1888 a is b # False class C1(object): a = 100 b = 100 c = 1000 d = 1000 class C2(objcet): a = 100 b = 1000 print(C1.a is C1.b) # True print(C1.a is C1.a) # True print(C1.c is C1.d) # True print(C1.d is C1.b) # Falsec
生成器
生成器的作用根据程序设计者制定的规则循环生成数据,当条件不成立时生成数据结束数据不是一次性全部生成出来,而是使用一个,再生成一个,可以节约大量的内存
生成器的创建生成器推导式生成器推导式与列表推导式相似,不过列表推导式使用小括号# 创建生成器 my_generator = (i * 2 for i in range(5)) print(my_generator)
yield 关键字:yield关键字生成器的特性:在def函数中具有yield关键字defmygenerator(n): for i in range(n): print('开始生成...') yield i print('完成一次...') 注意点:代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行生成器如果把数据生成完成,再次获取生成器中的下一次数据会抛出一个StopIteration异常,表示停止迭代异常while循环内部没有处理异常操作,需要手动添加处理异常操作for循环内部自动处理了停止迭代异常,使用起来更加方便,
生成器相关函数next函数获取生成器中的下一个值for循环遍历生成器中的每一个值
相关免费学习推荐:编程视频
以上就是Python最详细之数据类型讲解的详细内容,更多请关注其它相关文章!