与元组类似,但列表的长度与包含的内容均可被修改。
1.生成方法
使用 [ ] 或 list 类型函数来定义列表。
#[]方法
In[1]: a = [1, 3, None]
#list函数
In[1]: a = (1, 3, None)
In[2]: b = list(a)
In[3]: b
Out[1]: [1, 3, None]
2.对列表的修改
可以使用append、insert、extend、+、bisect模块中的bisect、insort方法添加元素,remove、pop删除元素。
#append方法将元素添加至列表尾
In[1]: a = [1, 2, None]
In[2]: a.append(3)
In[3]: a
Out[1]: [1, 2, None, 3]
#insert方法将元素添加至指定位置
In[1]: a = [1, 2, None]
In[2]: a.insert(2, 'foo')
In[3]: a
Out[1]: [1, 2, 'foo', None]
#insert方法因要遍历元素而比append方法计算代价更高
#extend方法将多个元素添加至列表尾
In[1]: a = [1, 2, None]
In[2]: a.extend([3, 'foo']) #参数要以列表的形式写入
In[3]: a
Out[1]: [1, 2, None, 3, 'foo']
# + 号连接两个列表,和元组相同,不赘述
# + 号方法因连接创建了新列表且过程中要复制对象,其计算代价比extend方法更高
#构建大型列表时,可以使用for循环添加元素
#bisect模块实现了二分查找算法,可以对排好序的列表进行操作,但不会检查列表是否已经排序。
#bisect.bisect方法返回找到元素应当插入的位置
In[1]: import bisect
In[2]: a = [1, 2, 2, 2, 3, 7]
In[3]: bisect.bisect(a, 2)
Out[1]: 4
#bisect.insort方法将元素插入到元素应当插入的位置
In[1]: import bisect
In[2]: a = [1, 2, 2, 2, 3, 7]
In[3]: bisect.insort(a, 6)
In[4]: a
Out[1]: [1, 2, 2, 2, 3, 6, 7]
#pop方法移除特定位置的元素
In[1]: a = [1, 2, None, 2]
In[2]: a.pop(1)
In[3]: a
Out[1]: [1, None, 2]
#remove方法移除第一个符合要求的值
In[1]: a = [1, 2, None, 2]
In[2]: a.remove(2)
In[3]: a
Out[1]: [1, None, 2]
3. 排序
使用sort、sorted、reversed对列表元素排序。
#sort方法对列表进行内部排序,不会创建新对象
In[1]: a = [6, 3, 4, 8, 9]
In[2]: a.sort()
In[3]: a
Out[1]: [3, 4, 6, 8, 9]
#sort方法传参key进行二级排序
In[1]: a = ['saw', 'small', 'He', 'foxes', 'six']
In[2]: a.sort(key = len)
In[3]: a
Out[1]: ['He', 'saw', 'six', 'small', 'foxes'] #相同长度的元素相对位置不改变
#sorted方法对列表元素进行排序并产生一个拷贝
In[1]: sorted('horse race')
Out[1]: [' ', 'a', 'c', 'e', 'h', 'o', 'r', 'r', 's']
4.切片
将start:stop:step传入索引符号,且均可缺省。
#索引包含start起始位置但并不包含stop结束位置,因此获得元素数量为stop-start
索引正向从0开始编号,逆向从-1开始编号
In[1]: seq = [3, 4, 5, 6, 7, 8]
In[2]: seq[1:5]
Out[1]: [4, 5, 6, 7]
In[3]: seq[-3:-1]
Out[2]: [6, 7]
#start或stop缺省默认传入起始或结束位置
In[1]: seq = [3, 4, 5, 6, 7, 8]
In[2]: seq[1:]
Out[1]: [4, 5, 6, 7, 8]
In[3]: seq[:-1]
Out[2]: [3, 4, 5, 6, 7]
#step表示隔几个取一个,取-1时可以对序列进行翻转
In[1]: seq = [3, 4, 5, 6, 7, 8]
In[2]: seq[1:5:2]
Out[1]: [4, 6]
In[3]: seq[::-1]
Out[2]: [8, 7, 6, 5, 4, 3]
#对变量赋值
In[1]: seq = [3, 4, 5, 6, 7, 8]
In[2]: seq[1:2] = [10, 11]
In[3]: seq
Out[1]: [3, 10, 11, 5, 6, 7, 8]
#reversed方法讲序列元素倒序排列,仅在实例化(list函数或for循环)时可以实现,是一个生成器。
In[1]: list(reversed(range(10)))
Out[1]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
5.zip对列表进行配对
zip可以将列表、元组或其他序列的元素配对,生成的列表长度由最短的序列决定。
#zip生成的元素是元组,使用zip(*)方法可以拆分出元组
In[1]: seq1 = [1, 2, 3]
In[2]: seq2 = ['a', 'b', 'c']
In[3]: z1 = zip(seq1, seq2)
In[4]: list(z1)
Out[1]: [(1, 'a'), (2, 'b'), (3, 'c')]
In[5]: seq3 = [True, False]
In[6]: z2 = zip(seq1, seq3)
In[7]: list(z2)
Out[2]: [(1, True), (2, False)]
In[8]: one, two = zip(*list(z2))
In[9]: one
Out[3]: (1, 2)