(1)定义
列表的长度可变,包括的内容也可变,使用[]或list来定义
a_list = [2, 3, 7, None] 创建list tup = ('foo', 'bar', 'baz') b_list = list(tup) 创建list b_list b_list[1] = 'peekaboo' 修改对应索引值 b_list 返回 ['foo', 'peekaboo', 'baz'] gen = range(10) gen list(gen) (2)增减元素 增加元素 b_list.append('dwarf') 尾部添加元素 b_list b_list.insert(1, 'red') 指定位置插入 b_list 注意:insert 计算代价较高,若从头尾插入,可用 collections.deque 减少元素 b_list.pop(2) 删除指定位置的元素 b_list b_list.append('foo') 添加元素,从尾部 b_list b_list.remove('foo')减少元素,先从头部 b_list
判断元素是否存在在列表 in /not in
'dwarf' in b_list
'dwarf' not in b_list
(3)合并列表
连接:+ 或 extend
[4, None, 'foo'] + [7, 8, (2, 3)] 返回 [4, None, 'foo', 7, 8, (2, 3)] 创建新列表,耗性能
x = [4, None, 'foo'] x.extend([7, 8, (2, 3)]) 将元素添加到已有的列表,较好
如:
everything = []
for chunk in list_of_lists:
everything.extend(chunk) 性能较好
everything = everything + chunk 耗性能
(4)排序
4.1 sort 对列表内部的值进行排序,不会产生新对象;针对list
a = [7, 2, 5, 1, 3] a.sort() 排序 a b = ['saw', 'small', 'He', 'foxes', 'six'] b.sort(key=len) 传递排序值的函数,据字符串的长度排序 b
4.2 sorted产生已排序的新对象 sorted(x),接受参数
sorted(iterable, cmp=None, key=None, reverse=False)
参数说明:
- iterable -- 可迭代对象。
- cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)
参考链接:Python sorted() 函数 | 菜鸟教程 (runoob.com)
b = sorted(a) # 保留原列表
sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函数
sorted(L, key=lambda x:x[1]) # 利用key
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda s: s[2]) # 按年龄排序
sorted(students, key=lambda s: s[2], reverse=True) # 按降序
4.3 bisect 模块,实现了二分搜索和已排序列表的插值
import bisect c = [1, 2, 2, 2, 3, 4, 7] bisect.bisect(c, 2) 返回 4;返回要插入的位置 注意:list 内部是否已排序,不检验;不会报错,但结果可能是错的 bisect.bisect(c, 5) 返回 6 bisect.insort(c, 6) 指定插入的位置 c
(5)切片 对序列选取其子集 基本形式是 x[start:stop]
seq = [7, 2, 3, 7, 5, 6, 0, 1] seq[1:5] 返回 [2, 3, 7, 5], 包头不包尾 seq[3:4] = [6, 3] 可指定位置赋值(修改) seq 返回 [7, 2, 3, 6, 3, 5, 6, 0, 1] seq[:5] 可省略start,即从头开始 seq[3:] 可省略stop,即是末尾结束 seq[-4:] 从尾部倒4为索引,至尾部; seq[-6:-2] seq[::2] 表示每隔多少索引取list里面的值,每次索引加2 seq[::-1] 表示反转list
(6)内建序列函数
6.1 enumerate 枚举
使用场景:
i = 0
for value in collection:
i += 1
常见需求:需要知道集合中的值及相应的索引,故python内建了对应的函数;修改如下
for i, value in enumerate(collection)
实际使用;将值与索引绑定
some_list = ['foo', 'bar', 'baz'] mapping = {} for i, v in enumerate(some_list): mapping[v] = i mapping 返回 {'foo': 0, 'bar': 1, 'baz': 2}
6.2 sorted排序 接受参数,参照排序
sorted([7, 1, 2, 6, 0, 3, 2]) sorted('horse race')
6.3 zip 将列表、元组或其他序列的元素配对,构成元组型的列表
seq1 = ['foo', 'bar', 'baz'] seq2 = ['one', 'two', 'three'] zipped = zip(seq1, seq2) list(zipped) #必须转成list,否则是个对象 seq3 = [False, True] list(zip(seq1, seq2, seq3)) #可处理任意长度的序列,但结果已最短的序列决定 zip和enumerate枚举一起使用的场景(同时遍历多个序列): for i, (a, b) in enumerate(zip(seq1, seq2)): print('{0}: {1}, {2}'.format(i, a, b)) 返回: 0: foo, one 1: bar, two 2: baz, three zip拆分,将行的列表转成列的列表 zip(*x) pitchers = [('Nolan', 'Ryan'), ('Roger', 'Clemens'),('Curt', 'Schilling')] first_names, last_names = zip(*pitchers) first_names last_names
6.4 reversed 倒序
list(reversed(range(10))) reversed是生产器,如果没有实例化(如list或for循环),并不会生产倒序列表
本篇知识点参考《利用python进行数据分析》,更多知识请阅读原书