补充print—格式化字符串
1.0语法格式:
print(value,...,sep=' ',end='\n',flie=sys.stduot,flush=False)
等价于
print(value1,value2,...,,valuen,sep=' ',end='\n',flie=sys.stduot,flush=False)
a='1'
print(a*3)
print('%o' % 17) #十进制强转为8进制
a,b,c,*d=1,2,3,4,5,6
print(type(d))
---> [4, 5, 6]
---> <class 'list'>
x=666
import sys
print(sys.stdout(x))
--->TypeError: '_io.TextIOWrapper' object is not callable
x=666
import sys
print(sys.stdout.write(x))
--->TypeError: write() argument must be str, not int
x=666
import sys
print(sys.stdout.write(str(x)))
--->6663
2.0格式化字符串
-
%格式化
-
占位符
格式 描述 %d 有符号的整数 %s 字符串 %c 字符及ASCll码 %o 无符号八进制整数 %x 无符号十六进制整数 %X ABDCE 当X 大写 也是大写 %e%E 科学技术法,2.3E3=2300.0 e可以等价于*10 %f 浮点数
%格式化字符串 用%匹配参数,注意个数一一对应
a=100%
print('%d%%' % a) 第二个%为转义字符
--->100%
3.0format格式化字符串
(1)位置映射
print('name:{},age:{}'.format('tom',18))
--->name:tom,age:18
(2)关键字映射
print('name:{},age:{},{address}'.format('tom',18,address='gangzhou,hangzhou'))
关键字可以放在任何位置,但是映射只能在最后
print('name:{},age:{},{address}'.format('tom',18,address='gangzhou,hangzhou'))
print('第一个元素是:{0[0]} ,第二个元素是:{0[1]},第三个元素是:{0[2]},第四个元素是:{1[0]}'.format(('www.','google','com'),('baidu','com')))
--->第一个元素是:www. ,第二个元素是:google,第三个元素是:com,第四个元素是:baidu
(3)列表
字符串,数字都是一个不可更改的类型
用方括号括起来的[ ] ,每个元素以逗号分隔;
可以储存不同的数据类型
- 特点
-
是一个有序的
-
可以重复的
-
可变类型
-
3.3.1创建
li1=[1,2,3,'abcd','city','college',['l','love','you']]
print(li1)
3.3.2强转
sr = 'abcd'
li = list(sr)
print(li)
3.3.3拼接
li1=['i']
li2=['love']
li3=li1+li2
print(li3)
--->['i', 'love']
3.3.4重复
li2=['love']
print(li2*3)
--->['love', 'love', 'love']
3.3.5索引(偏移)[ ],切片[:],[::]
-
li=['c','i','t','y','city','college','zhejiang',['city','college','zhengjiang']] print(len(li)) print(li[0],li[5]) print(li[:5]) print(li[::-1]) print(li[7][1]) --->8 --->c college --->['c', 'i', 't', 'y', 'city'] --->[['city', 'college', 'zhengjiang'], 'zhejiang', 'college', 'city', 'y', 't', 'i', 'c'] ---> college
3.3.6增
- append()增加
li=['city','college']
li1=['c','v','b']
li.append(li1)#li.append('s')
print(li)
--->['city', 'college', ['c', 'v', 'b']]
- extend() 拓展(拆开元素增加)
li=['city','college']
li1=['c','v','b']
li.extend(li1)
print(li)
--->['city', 'college', 'c', 'v', 'b']
- insert() 插入 按照索引添加,索引值不能超过范围
li=['city','college']
li1=['c','v','b']
li.extend(li1)
print(li)
li.insert(1,li1)
print(li)
--->['city', 'college', 'c', 'v', 'b']
--->['city', ['c', 'v', 'b'], 'college', 'c', 'v', 'b']
3.3.7改
li=['city','college']
li1=['c','v','b']
li.extend(li1)
print(li)
li.insert(1,li1)
print(li)
li[5]='666'
li[2:5]=['x','y','z']
print(li)
--->['city', ['c', 'v', 'b'], 'college', 'c', 'v', '666']
print(li)
--->['city', ['c', 'v', 'b'], 'x', 'y', 'z', '666']
3.3.8删除
- pop()
- 如果不指定索引,默认删除最后一个元素,本身会返回删除的元素
- 删除指定对应元素
li=['a','b','c','d']
print(li.pop(2))
print(li)
--->c
--->['a', 'b', 'd']
- remove 移除第一次遇到的指定元素
li=['a','b','c','d']
print(li.remove('c'))
print(li)
--->['a', 'b', 'd']
- del 彻底删除
li=['a','b','c','d']
del li[3]
print(li)
--->['a', 'b', 'c']
(4)遍历
(1)元素遍历
li=['a','b','c','d']
for i in li:
print(i,end=' ')
--->a b c d
(2)索引遍历
li=['a','b','c','d']
for i in range(len(li)):
print(li[i],end=' ')
--->a b c d
(3)枚举遍历
- enumerate(),对于一个可迭代的/可遍历的对象(如字符,列表等),将其组成一个索引序列,利用它,我们可以同时获得索引和值
li=['a','b','c','d']
for i in enumerate(li[:2],4):
print(i)
--->(4, 'a')
(5, 'b')
(5)堆和栈,用列表实现
- 计数,count(),查找元素出现的次数
- 反转,reverse()
li=list('abcd')
print(li)
li.reverse()
print(li)
--->['a', 'b', 'c', 'd']
--->['d', 'c', 'b', 'a']
- 排序,sort()
li=list('abcd')
print(li)
li.reverse()
print(li)
li.sort()
print(li)
li.sort(reverse=True)
print(li)
--->['a', 'b', 'c', 'd']
--->['d', 'c', 'b', 'a']
--->['a', 'b', 'c', 'd']
--->['d', 'c', 'b', 'a']
(6)赋值与深浅拷贝
- 赋值是引用的对象
la = [1,2,3,4,5,'a',['b1','b2']]
lb =la
print(la,lb)
print(la)
print(lb)
print(id(la),id(lb))
--->[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
--->[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
--->[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
--->1782454496136 1782454496136
- 深浅拷贝
- 浅拷贝会创建新对象,内容是元对象的引用。浅拷贝相当于我们只拷贝了一层,修改外层元素,会修改引用,让他们指向另一个位置;
- 修改嵌套列表的元素,列表地址没有发生变化,指的还是同一位置
- 三种实现方法:
- 切片操作:[:]
- 工厂函数:list(li)
- copy模块被的copy函数
la = [1,2,3,4,5,'a',['b1','b2']]
lb =la
lb2=la[:]
print(id(la),id(lb2))
import copy
lb_copy= copy.copy(la)
print(id(la),id(lb_copy))
--->1688912997256 1688912920904
--->1688912997256 1688914528584
la.append('test')#添加原子类型,不会影响lb_opy
print(la)
print(lb_copy)
--->[1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'test']
--->[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
- 深拷贝
- 拷贝对象的所有元素,包括多层嵌套元素。
- 因此,是开辟了一个新的内存储存区,和数据源没有关系了。
import copy
la = [1,2,3,4,5,'a',['b1','b2']]
lb_deepcopy=copy.deepcopy(la)
print(la,id(la))
print(lb_deepcopy,id(lb_deepcopy))
la[6][1]='aaa'
print(la)
print(lb_deepcopy)
--->[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2091637115272
--->[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2091637116552
--->[1, 2, 3, 4, 5, 'a', ['b1', 'aaa']]
--->[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
(7)列表
- 列表解析式
li=[]
for i in range(10):
li.append(i)
print(li)
print([x for x in range(10) if x%2==0])
--->[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
--->[0, 2, 4, 6, 8]
sr='城市学院'
print([ord(x) for x in sr])
--->[22478, 24066, 23398, 38498]
-
列表生成式,用来生成列表的特定的语法形式
-
格式:
[表达式 for 迭代元素 in 可迭代对象]
- 实现原理
迭代[可迭代对象]中的每一个元素
每迭代一次的结果赋值给对应的迭代元素,在通过表达式运算得到一个新的值
最后所有的表达式计算的值以一个列表的形式返回。
- 三目运算符
y=10
x=y+1 if y>10 else y-1
print(x)
--->9
- 带过滤功能格式
[exp for iter_val in iter if if_condition]
li=[]
for iter_val in iter:
if if_condition:
li.append(iter_val)
print(li)
(8)元组
-
有序
-
不可以重复
-
不可以更改
-
符号使用: ()
元组的创建,单元素元组的创建
- 有逗号才是单元素的元组
tp=('sd',)
print(type(tp))
---><class 'tuple'>
多元素元组的创建,包含多种数据类型
- 拼接
- 重复
- 索引(偏移) 切片[ : ]
- index() 中间填入所要搜索的元素,返回值为第几位
- 增不能
- 不可以删除某一个元素,但可以删除全部 del
tp=('sd','sdaw',['sda','sss'])
tp1=('ss',)
print(tp*3)
print(tp+tp1)
print(tp[0:2])
tp[2][1]='123'
print(tp)
--->('sd', 'sdaw', ['sda', 'sss'], 'sd', 'sdaw', ['sda', 'sss'], 'sd', 'sdaw', ['sda', 'sss'])
--->('sd', 'sdaw', ['sda', 'sss'], 'ss')
--->('sd', 'sdaw')
--->('sd', 'sdaw', ['sda', '123'])
del tp
print(tp)
--->name 'tp' is not defined
- 遍历 索引 枚举enumerate
tp=('sd','sdaw',['sda','sss'])
for i in tp:
print(i,end=' ')
for i in range(len(tp)):
print(tp[i],end=' ')
for i in enumerate(tp[:],2):
print(i,end=' ')
--->sd sdaw ['sda', 'sss'] sd sdaw ['sda', 'sss'] (2, 'sd') (3, 'sdaw') (4, ['sda', 'sss'])