序列:
- 字符串
- 列表
- 元组
列表中的顺序很重要。
公共特性
标准类型操作符
<、>、<=、>=、==、!= 比较规则是序列的顺序依次比较,如果类型不匹配直接抛异常。
序列类型操作符:
- in、not in时间复杂度是O(n)
a = [1,2,3,4]
print(1 in a)
- 连接操作符(+)把两个相同类型的序列进行连接,不高效,创建新对象,把原有对象拷贝进去
- 重复操作符(*):让一个序列重复N次
序列切片操作
[ ],[:],[::]通过下标访问其中的一个元素,或者某个子序列。越界会抛异常
- [:] 从开始取到尾
- [0:3]或[:3] 从0到下标3,包含0不包含3
- [::2] 步长是2,每隔一个元素取一个元素
- [::-1] 序列逆置
序列内建函数
- len:返回序列的长度
- max:返回序列中的最大值
- min:返回序列中的最小值
- sorted:排序,返回一个有序的序列(输入参数的副本,不修改原序列),支持自定制规则:逆置,按绝对值排序
- sum:序列中的元素求和(元素都是数字)
- zip:拉链,行列互换,每个元素都是元组,拉到最短的地方截止
字符串
单引号和双引号等效
三种引号的区别:三引号可以跨行
只有列表和字典是可变对象,字符串是不可变对象,只能把标签撕下来,贴在另外的对象上
比较规则按字典序
x = 10
y = 20
a = f 'x = {x}, y = {y}'
print(a)
原始字符串:a = r ‘hello \n world’
- 字符串合并join
a = ['aaa', 'bbb','ccc']
print(' '.join(a))
#执行结果
'aaa bbb ccc'
- 切分split
a = 'aa bb cc'
print(a.split(' '))
#执行结果
['aa', 'bb', 'cc']
- 去掉字符串开头结尾的空白(空格,换行,制表符)strip
a = ' hello world'
print(a.strip())
#执行结果
hello world
print(a.lstrip())
print(a.rstrip())
- 对齐ljust、rjust、ljust
a = 'hello world'
print('['+a.ljust(30)+']')
print('['+a.rjust(30)+']')
print('['+a.cjust(30)+']')
- 判定字符串是字母/数字
a = 'hello'
print(a.isalpha())
b = '1234'
print(b.isdigit())
#执行结果
True
True
- 转换大小写
print(a.lower())
print(a.upper())
- 查找子串
a = 'hello world'
print(a.find('world'))
print('world' in a)
- 替换
#创建新的字符串
print(a.replace('world','hehe'))
列表
- append:追加元素
a.append(b),二维列表
a.extend(b),类似于a+=b - 指定位置插入元素:a.insert(1,100)
- 删除指定下标元素 del(a[0])
- 按值删除元素a.remove(1)
- a.pop(-1),删除最后一个元素(默认值是-1,填其他的值就是删对应下标的值)
- 原地翻转列表:a.reverse(),修改原列表
- 排序:sort(),原地排序
列表的深拷贝浅拷贝
a = [10, 20, 30, 40]
b = a #浅拷贝
import copy
b = copy.deepcopy(a) #深拷贝,深拷贝只能针对可变对象使用
写时拷贝
真正触发修改时,才触发深拷贝
元组
- 大多是操作和列表类似
- 元组是只读的,reverse,sort,append,extend都不支持
- 一个值接收函数的多个返回值,这个值就变成了元组
- a = (10,),此时a是元组
- a = (10+20)*3,此时a是一个int
- 元组两个重要应用场景:传参时避免参数被函数修改,元组是可hash的元组可作为字典的key,列表不行
- 元组里面包含了可变对象,这个对象还是可以改变的
字典
映射类型数据,增删查改都是O(1)
创建字典
- {}
- 工厂方法dict
a = {
10: 20,
'key', 'value',
'a': 100
}
a = dict((['x', 1], ['y', 2]))
字典的key必须是hash,不可变是可hash的必要条件。
元组是可hash的:print(hash((10, 20)))
字符串的hash算法:md5/sha1
访问字典元素
for key in a:
print(key, a[key])
print (a[key])
修改字典元素
a[key] = value2
#使用[ ]可新增/修改字典元素
删除字典元素
a = {1: 100}
del (a[1])
print(a)
- hash线程安全问题
- 协程:手动进行调度,比线程更轻量
- 字典比较:长度—key—value
- 取出所有的key,print(a.keys())
- 取出所有的value,print(a.values())
- 取出一个列表,print(a.items())
集合set
集合没有顺序的差异,基于hash表(底层是字典),交集,并集,差集,对称差集
a = set([1,2,3,4])
a = set([3,4, 5])
print(a&b) #交集 3 4
print(a | b) #并集 1 2 3 4 5
print(a - b) #差集 1 2
print(a ^ b) #对称差集 1 2 5
集合数据不能重复,会自动去重