字符串的补充内容
1.可变字符串
在python中,字符串属于不可变对象,不支持原地修改。如果需要修改其中的值,智能地创建新的字符串对象,可以使用io.StringIO对象或array模块。
eg:
此处是老师敲的代码
这个是自己敲得 错误原因是没有定义sio ,报错原因还不清楚,希望老师帮助解决
2.基本运算符
2.1比较运算符,在python里可以连用
2.2位操作
>>> a=0b11001
>>> b=0b01000
>>> a
25
>>> b
8
>>> c=a|b#a或b
>>> c
25
>>> bin(c)
'0b11001'
>>> bin(a&b)
'0b1000'
>>> #上述二进制的计算不知道怎么得来的 需要老师补充这方面的知识点,并讲解
>>> bin(a^b)
'0b10001'
>>> #异或 相同为0 相异为1
>>> a=3
>>> a<<2#左移2位,*2
12
>>> #上述笔误,左移2位相当于*4,由此可推,左移1位相当于*2,右移1位相当于/2
>>> a>>1
1
>>> a=3
>>> a>>1
1
>>> #此处只保留整数部分(没有四舍五入)
>>> 3+2==>
SyntaxError: invalid syntax
>>> 3+2==
SyntaxError: invalid syntax
>>> 3+2
5
>>> "3"+"2"
'32'
>>> #上述分别为数字的相加与字符串的拼接
>>> [10,20,30]+[5,10,100]
[10, 20, 30, 5, 10, 100]
>>> #上述为列表,元素等的合并
>>> 3*2#数字相乘
6
>>> "sxt"*3#字符串复制
'sxtsxtsxt'
>>> [10,20,30]*3
[10, 20, 30, 10, 20, 30, 10, 20, 30]
>>> #列表,元素等的复制
2.3复合赋值运算符
2.4运算符优先级问题
另补充:赋值运算符>逻辑运算符
第3章 序列
序列是一种数据存储方式,用来存储一系列数据。在内存中,序列就是一块用来存放多个值的连续的内存空间。
a=[10,20,30,40],
通过a[0],a[1]来获取,位置从左往右是0,1,2.。。。。
因此,序列中存储的是整数对象的地址而不是整数对象的值。
3.1 列表的创建
a=[]
a=[]#创建空的列表对象
>>> a.append(20)#利用增减函数的方法在空的列表里添加元素
>>> a
[20]
3.2 list()创建
使用list()可以将任何可迭代的数据转化成列表。(数字/字符串)
a=list("english")
>>> a
['e', 'n', 'g', 'l', 'i', 's', 'h']
3.3 range()创建整数列表
range () 创建整数列表的语法格式:range([start,]end[,step])
其中,start参数:可选,表示起始数字。默认是0
end参数:必选,表示结尾数字
step参数:可选,表示步长,默认为1
PS:Python3中,range()返回的是一个range对象,而不是列表。
list(range())
eg:
range(3,15,2)#开始,结尾,步长
[3, 5, 7, 9, 11, 13]
>>> list(range(3,15,2))
[3, 5, 7, 9, 11, 13]
>>>
3.4推导式生成列表
涉及到for循环和if语句
a=[x*2 for x in range(5)] #循环创建多个元素
>>> a
[0, 2, 4, 6, 8] #range(5) 即:0,1,2,3,4
>>> #x*2是0,2,4,6,8
>>> a=[x*2 for x in range(100) if x%9==0] #通过if过滤元素
>>> a
[0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]
循环条件同上,过滤条件是能被9整除
3.5列表元素的增加和删除
当列表增加和删除元素时,列表会自动进行内存管理,大大减少了程序员的负担。但这一特点涉及到列表元素的大量移动,效率较低。除非必要,我们一般只在列表的尾部添加元素或删除元素,会大大提高列表的操作效率。
3.5.1 元素增加的方法:
1).append()方法
>>> a=[20,40]>>>a.append(80)
>>> a
[20, 40, 80]
>>> #在尾部添加新的元素
2).+运算符操作
不是真正的尾部添加元素,而是创建新的列表对象,将原列表元素和新列表的元素依次复制到新的列表对象中。缺点:会涉及大量的复制操作,不建议用于大量元素。
a=[20,40]
a=a+[50]
3).extend()
将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象。
a=[20,40]
a.extend([50,60])
a=[20,40]
a=[20,40]
>>> a.extend([50,60])
>>> a
[20, 40, 50, 60]
>>> a=[20,40]
>>> a=a.extend([50,60])#疑问在于,为什么这个地方不能写成a=?
4).insert()插入元素
insert()方法可以将指定的元素插入到列表对象的任意指定位置。缺点:这样会让插入后面所有的元素进行移动,影像处理速度。如果涉及到大量的元素,应该避免使用。类似发生移动的函数还有:remove()、pop()、del(),他们在删除非尾部元素时候也会发生操作位置后面元素的移动。
eg:a=[10,20,30]
>>> a.insert(2,100)#在100插入到列表对象的指定位置,此处为第二个位置处
>>> a
[10, 20, 100, 30]
5).乘法扩展
使用乘法扩展列表,生成一个新列表,新列表元素使得原列表元素的多次重复。
a=[20,30]
>>> b=a*3
>>> b
[20, 30, 20, 30, 20, 30]
3.5.2列表元素的删除
1).del 删除
删除指定位置的元素
A=[100,200,888,300,400]
>>> del A[2]
>>> A
[100, 200, 300, 400]
2).pop()
pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素。
A
[100, 200, 300, 400]
>>> b=A.pop()
>>> b
400#删除元素,默认情况是返回到列表最后一个元素
3).remove()
删除首次出现的指定元素(与以上两种不同,他是指定元素而不是索引位置)
A.remove(100)
>>> A
[200, 300]
3.5.3 列表元素的访问和计数
1)、index()获得指定元素在列表中首次出现的索引位置。语法:index(value,[start,[end]])。其中,start和end指定了搜索的范围。
a=[10,20,30,40,50,20,30,20,30]
>>> a.index(20) # 首次出现20的位置
1
>>> a.index(20,3) # 从索引位置3开始,往后出现的第一个20
5
>>> a.index(30,5,7) #从索引位置5-7这个区间内,首次出现30的位置
6
2)、count()获得指定元素在列表中出现的次数
3)、len()返回列表长度,即列表中包含元素的个数
4)、成员资格的判断
判断列表中是否存在指定的元素,一般采用in关键字来判断,直接返回true或false 。
也使用count()函数来判断,>0则表示存在。
3.5.4 切片操作
列表的切片操作与字符串类似,切片slice操作可以让我们快速提取子列表或修改。
标准格式:[起始偏移量start:终止偏移量end[:步长step]]
注:当步长省略时,可以省略第二个冒号
a=[10,20,30,40,50,20,30,20,30]
>>> a[:]
[10, 20, 30, 40, 50, 20, 30, 20, 30]
>>> a[1:3:1] #头,尾,步长 包头不包尾
[20, 30]
>>> a[1::2]
[20, 40, 20, 20]
>>> a[1:]
[20, 30, 40, 50, 20, 30, 20, 30]
>>> a[:2]
[10, 20]
3.5.5列表排序
升序: a.sort()
降序:a.sort(reverse=True)
打乱顺序:import random
random.shuffle(a)
排序不改变id
3.5.6 建立新列表的排序
升序:sorted()
降序:sorted(a,reverse=True)
3.5.7reversed()返回迭代器
内置函数reversed()返回迭代器支持进行逆序排列,与列表对象reverse()方法不同的是,内置函数reversed()不对原列表做任何修改,只是一个返回逆序排列的迭代器对象。
3.6 多纬列表
#m是行,n是列 ,嵌套与循环
range(3)是0,1,2.
\t是制表符,前面学的只是
3.7 元组 tuple
a=(10,20,30)
>>> type(a)
<type 'tuple'>
>>> a=10,20,30
>>> type(a)
<type 'tuple'> # 因此可见,小括号可以省略
ZIP是用来压缩的。
eg:
>>>a=[1,2,3]
>>> b=[4,5,6]
>>> c=[7,8,9]
>>> d=zip(a,b,c)
>>> list(d)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]