列表list
list_a = [1,2,3,None] # [1, 2, 3, None]
list函数,将其他序列转换为列表
tup = 'a','b','c'
list_b = list(tup) # ['a', 'b', 'c']
与元组不同,列表是可变类型,对元素进行更改可以直接改变对象
list_b[0] = 'fff'
list_b # ['fff', 'b', 'c']
列表可以用内置函数随意添加&插入元素并扩容(尽管众所周知insert会比较吃力)
list_a.append('a') # 增
list_a.insert(0,'ww') # 插
list_a.pop(3) # 按位置去除
list_a.remove('ww') # 去除第一个查找到的元素
in 和 not in 判断元素是否在序列中
1 in list_a # True
20 not in list_a # True
+ 和 extend 两种合并列表的方法
区别在于,前者代价更大,创建新列表并复制对象;后者仅对原对象添加元素
list_a+list_b
list_a.extend(list_b)
排序(改变原列表)
list_c = [9,8,4,7,3,0,5]
list_c.sort()
list_c # [0, 3, 4, 5, 7, 8, 9]
二级排序key,如字符串长度
list_b.sort(key = len)
list_b # ['b', 'c', 'fff']
bisect模块
bisect模块可以实现二分搜索和已排序列表的插值
bisect.bisect会找到元素应当被插入的位置,并保持序列排序,而bisect.insort将元素插入到相应位置
import bisect
list_d = [1,2,3,4,5,6,7,8,9]
bisect.bisect(list_d,6) # 6
bisect.insort(list_d,5)
list_d # [1, 2, 3, 4, 5, 5, 6, 7, 8, 9]
注意:bisect模块不会检测数列是否已排序,对未排序的数列使用也不会报错,不过结果会有错误
:切片
seq = [2,4,7,3,0,3,6]
# 左包右不包
seq[1:3] # [4, 7]
seq[:3] # [2, 4, 7]
seq[3:] # [3, 0, 3, 6]
负数从右开始数
seq[:-1] # [2, 4, 7, 3, 0, 3]
步进值step可以在第二个冒号后面使用
seq[::2] # [2, 7, 0, 6]
可以利用切片步进值特性,对列表或元组进行翻转
seq[::-1] # [6, 3, 0, 3, 7, 4, 2]