- 可变字符串 io.StringIO(a)
- 由于字符串是不可变序列,修改的话会生成新对象,使用io模块可以直接修改字符串对象,用于需要经常修改的字符串
- 需要先
import io
- sio = io.StringIO(s)
- sio.seek(7)
- sio.write('g')
- sio.getvalue()
- 位操作
- 位与 &:全1才是1,其它都是0
- 位或 |:有1就是1,全0才是0
- 位异或 ^:不同就是1,相同就是0
- 移位
- a = 3
- a << 1:左移1位,相当于a乘以2的1次方
- a >> 3:右移3位,相当于a除以2的3次方
- 特点是比乘除法快
- 加法
- 数字:相加
- 字符串:拼接
- 列表、元组:合并
- 乘法:
- 数字:相乘
- 字符串、列表、元组:复制多次
- 复合赋值运算
- 加等 a = a + 1 → a += 1
- 运算优先级
- 乘除 → 加减
- 位运算、算术运算 → 比较运算 → 赋值运算
- 积极使用小括号
- 列表的特点
- 可变(大小和内容都可变)
- 元素的类型可以不同
- 列表对象a,储存的是序列对象的地址,序列对象存储的是元素对象的地址
- 列表-创建的方式
- 方括号:
a = [10,20,30]
- list():将可迭代对象直接转成列表
list("abcd")
list("range(10)")
,创建一个整数列表,range()直接创建的是一个range对象
- 推导式生成列表
a = (x*2 for x in range(11))
- 生成的直接就是列表,不用list()转换
- 方括号:
- 列表-添加元素的方法
- append():最推荐,原地修改,尾部添加
a.append(待添加的内容)
- extend():原地修改,尾部添加可迭代对象
a.extend(待添加的可迭代对象)
- insert():指定位置,插入元素;插入位置后的内容都会被拷贝,效率下降
a.insert(指定位置,待添加的内容)
- 加号添加:不推荐,是复制原列表和待添加列表形成新列表
c =a+b
- 乘号扩展:原列表元素的多次重复
b = a*3
- append():最推荐,原地修改,尾部添加
- 列表删除的3种方式(本质全部是拷贝)
- del()
del a[0]
- 删除列表a中0号位置的元素,0号以后的元素复制一遍,再向前拷贝
- 不指定位置就是删除整个列表
- pop()
b = a.pop(需要弹出的元素的位置)
- 默认是弹出最后一个位置的元素
- remove()
b = a.remove('x')
- 删除首次出现的指定字符,不存在的话就抛异常
- del()
- 列表-访问和计数
- index()
a.index(指定访问元素值)
,返回指定元素首次出现的位置
- count()
a.count(指定计数的元素值)
,返回指定元素在列表中出现的次数
- len()
len(a)
获得列表长度
- in、not in成员资格判断
10 in a
,返回True或False10 not in a
,返回True或Falsea.count(10)
,返回0或大于0
- index()
- 列表-切片
- 和字符串一样
[起始位置:终止位置:步长]
- 和字符串一样
- 列表的遍历
for x in a
print x
- 列表排序
- sort(),不新建列表,原地修改
a.sort()
,默认升序a.sort(reverse=True)
,降序
- sorted(),新建列表排序
b = sorted(a, reverse=True)
- random(),乱序,原地修改
import random
random.shuffle(a)
- reversed(),返回迭代器
b = list(reversed(a))
- max(),返回最大值
- min(),返回最小值
- sum(),数值型列表中元素相加求和
- sort(),不新建列表,原地修改
- 二维列表
a = [[a,b],[c,d],[e,f],[g,h]]
a[1][1]
,返回d- 嵌套循环打印二维列表a
- 外面的循环是外层的位置编号
- 内部的循环是第二层的位置编号,需要打印制表符
- 外部循环一次,需要打印换行符
- 外面的循环是外层的位置编号
- 元组-特点
- 不可变序列
- 元组的创建
- 小括号直接创建,小括号可以省略
- 如果只有一个元素,小括号不可以省略,且元素后需要加逗号,否则不会被识别成元组
b = (10,)
没有逗号也会被识别为整型
- 如果只有一个元素,小括号不可以省略,且元素后需要加逗号,否则不会被识别成元组
- tuple(),将可迭代对象转变为元组
b = tuple()
,创建一个空元组对象- b = tuple('abc')
- b = tuple(range(5))
- b = tuple([1,2,3])
- 小括号直接创建,小括号可以省略
- 元组的访问
- 定位访问:
a[1]
,跟字符串和列表一样 - 切片访问:跟字符串列表一样
- 定位访问:
- 元组-排序
- 由于不可以修改,所以只能用sorted()来创建新列表进行排序
b = sorted(a)
- 由于不可以修改,所以只能用sorted()来创建新列表进行排序
- 元组-zip
- zip(),将多个列表对应位置的元素组合成元组,返回一个zip对象
- 元组-生成器推导式
- 生成器推导式生成的是一个生成器对象,且只能调用一次
- 可用
s.__next__()
来逐次调用指针- 但我现在还不知道有什么用
- 元组的特点
- 不可变序列
- 比列表访问和处理速度快
- 可以作为字典的键(整数、字符串也可以),虽然我也不知道怎么样,但列表不可以作为字典的键