前一天的补充
文章目录
可变字符串
在python中字符串是不可变的,可以通过io.StringIO获取新对象,对字符串进行修改,并且地址保持不变。
// io.StringIO()
>>> s="hello word"
>>> s
'hello word'
>>> id(s)
1548270700080
>>> import io
>>> sio=io.StringIO(s)
>>> sio.getvalue()
'hello word'
>>> sio.seek(1)
1
>>> sio.write("i")
1
>>> sio.getvalue()
'hillo word'
>>> id(s)
1548270700080
>>>
运算符优先级
- 乘除优先于加减
- 位运算符、算术运算符>比较运算符>赋值运算符>逻辑运算符
python不支持自增(++)和自减(–)
列表
序列:一种数据的存储方式,用来存储一系列数据
结构组成:字符串、列表、元组、字典、集合
列表的创建
有两种创建方式 [],list()
// 创建列表
#第一种
>>> a=[1,2]
>>> a
[1, 2]
#第二种
>>> a=list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
列表元素的增加和删除
列表元素的增加和删除会对内存进行管理,但是涉及列表元素的大量移动,执行效率低,因此一般在尾部对元素进行增加和删除。
元素的增加
元素的增加有五种方式,attend、"+"、extend、insert、"*"。
// 元素的增加
#第一种方式,id不发生改变
>>> a=[20,30,40]
>>> id(a)
2455693377736
>>> a.append(80)
>>> a
[20, 30, 40, 80]
>>> id(a)
2455693377736
#第二种方式,id改变,执行效率低
>>> a=[20,30,40]
>>> id(a)
2455693216968
>>> a=a+[80]
>>> a
[20, 30, 40, 80]
>>> id(a)
2455682408136
#第三种方式,id不变
>>> a=[20,30,40]
>>> id(a)
2455693377800
>>> a.extend([80])
>>> a
[20, 30, 40, 80]
>>> id(a)
2455693377800
#插入
>>> a=[20,30,40]
>>> id(a)
2455693262792
>>> a.insert(2,80)
>>> a
[20, 30, 80, 40]
>>> id(a)
2455693262792
#乘法
>>> a=[20,30,40]
>>> b=a*2
>>> b
[20, 30, 40, 20, 30, 40]
>>> a
[20, 30, 40]
元素的删除
元素的删除有三种方式,del、pop、remove
// 元素的删除
#第一种方式,对数组进行了拷贝
>>> a=[20,30,40]
>>> a
[20, 30, 40]
>>> del a[1]
>>> a
[20, 40]
#第二种方式,删除并返回指定位置的元素,未指定则默认为最后一个元素
>>> a=[20,30,40]
>>> a
[20, 30, 40]
>>> a.pop()
40
>>> a
[20, 30]
#第三种方式,删除首次出现的指定元素
>>> a=[20,30,20,40]
>>> a
[20, 30, 20, 40]
>>> a.remove(20)
>>> a
[30, 20, 40]
列表元素的访问和计数
列表元素的访问可通过索引进行,与字符串类似
// 列表元素的相关操作
#元素的访问
>>> a=[20,30,20,40]
>>> a
[20, 30, 20, 40]
>>> a[1:3]
[30, 20]
#指定元素首次出现的索引位置
>>> a.index(20)
0
#对指定元素的出现个数进行计数
>>> a.count(20)
2
#判断元素是否在列表中
>>> 20 in a
True
>>> 50 in a
False
列表的切片
与字符串的相关运算相似
列表排序
对列表内的元素进行排序有三种方式,sort()、sorted()、reversed()
// sort()
#升序
>>> a=[20,30,60,40,10]
>>> a
[20, 30, 60, 40, 10]
>>> a.sort()
>>> a
[10, 20, 30, 40, 60]
#降序
>>> a.sort(reverse=True)
>>> a
[60, 40, 30, 20, 10]
#打乱顺序
>>> import random
>>> random.shuffle(a)
>>> a
[30, 20, 10, 40, 60]
// sorted()
>>> a=[20,30,60,40,10]
>>> sorted(a)
[10, 20, 30, 40, 60]
// reversed() 返回迭代器,不对原列表做修改,只是返回一个逆序排列的迭代器对象,只能使用一次
>>> a=[20,30,60,40,10]
>>> a
[20, 30, 60, 40, 10]
>>> b=reversed(a)
>>> b
<list_reverseiterator object at 0x0000024F78DC6860>
>>> list(b)
[10, 40, 60, 30, 20]
>>> list(b)
[]
多维列表
一维列表为[],二维列表为[[],[], ],对列表进行嵌套。下边为对二维列表的访问。
// 二维列表的访问
>>> a=[10,20,[30,40]]
>>> a
[10, 20, [30, 40]]
>>> a[0]
10
>>> a[2]
[30, 40]
>>> a[2][0]
30
>>> a[2][1]
40
元组
元组是不可变序列,它的访问速度和处理速度比列表快
元组的创建
有两种创建方式 ()、tuple()
// 元组的创建
#第一种方式
>>> a=(20,30,60,40)
>>> a
(20, 30, 60, 40)
>>> a=20,30,60,40
>>> a
(20, 30, 60, 40)
>>> type(a)
<class 'tuple'>
#第二种方式
>>> a=tuple("abcde")
>>> a
('a', 'b', 'c', 'd', 'e')
>>> type(a)
<class 'tuple'>
元组的删除、访问、计算和排序
与列表的运算类似,删除使用del,但与列表不同的是元组的元素不能改变。并且元组在排序时只能使用sorted。
// 元素的修改
#列表元素可以改变
>>> a=[20,30,50]
>>> a
[20, 30, 50]
>>> a[0]="g"
>>> a
['g', 30, 50]
#元组元素不可改变
>>> a=20,30,50
>>> a[0]="g"
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
a[0]="g"
TypeError: 'tuple' object does not support item assignment
生成器推导式创建元组
生成器推导式创建元组只能用一次
// 创建元组
>>> a=(x for x in range(5))
>>> a
<generator object <genexpr> at 0x00000267063D6F10>
>>> tuple(a)
(0, 1, 2, 3, 4)
>>> list(a)
[]