基本数据结构之列表
列表 list 是一种有序的集合, 可以随时添加和删除其中的元素. 与 c,java 中的数组有相似之处, 但是 c,java 中的数组必须存放同一类型的元素, 而在 python 的列表中, 存放的元素可以是不同的类型. 序列都可以进行的操作包括索引, 切片, 加, 乘, 检查成员.
1. 列表的表示
创建一个列表, 只要把逗号分隔的不同的数据项使用方括号括起来即可.
- list1 = ['str','中文',123,'Python']
- list2 = [2,3,5,78,999]
- list3 = [['str1','str2'],'abcde','pppp'] #一个列表作为另一个列表中的一个元素
2. 列表的特性
1. 列表索引
符号为:[索引数值]
list = ['str11','str22','str33','str44']
(1). 正向索引
- >>> list[0]
- 'str11'
- >>> list[1]
- 'str22'
- >>> list[3]
- 'str44'
(2). 反向索引
- >>> list[-1]
- 'str44'
- >>> list[-2]
- 'str33'
2. 列表的切片
和字符串的切片一样, 字符串中的每一个字符作为基本单位, 列表中的以逗号分隔开的每个元素作基本单位.
list[start:end:step] # 从 start 位置开始到 end-1 位置结束, 步长为 step;
- 如果 start 省略, 则从头开始切片;
- 如果 end 省略, 一直切片到字符串最后;
- >>> list = [111,222,333,44,55,66,77,88]
- >>> list[::] #切片全部
- [111, 222, 333, 44, 55, 66, 77, 88]
- >>> list[:-1] #从第一个元素到倒数第 2 个元素
- [111, 222, 333, 44, 55, 66, 77]
- >>> list[:-2] #从第一个元素到倒数第 3 个元素
- [111, 222, 333, 44, 55, 66]
- >>> list[::2] #步长为 2
- [111, 333, 55, 77]
- >>> list[::-1] #步长为负数, 从末尾开始切片
- [88, 77, 66, 55, 44, 333, 222, 111]
- >>> list[::-2] #步长为 - 2
- [88, 66, 44, 222]
3. 列表的重复
符号为:*
- >>> list = ['aa','bb','cc']
- >>> list*3
- ['aa', 'bb', 'cc', 'aa', 'bb', 'cc', 'aa', 'bb', 'cc']
4. 列表的连接
符号为:+
- >>> a = ['ab','ef','gg']
- >>> b = ['nice','good','great','perfect']
- >>> a+b
- ['ab', 'ef', 'gg', 'nice', 'good', 'great', 'perfect']
5. 成员操作符
符号为: in 与 not in
- >>> list = ['abc','egg','yyy','完美']
- >>> 'abc' in list
- True
- >>> 'a' in list
- False
- >>> '我' not in list
- True
- >>> '完美' not in list
- False
3. 更新列表
符号为: 赋值符号 =
- >>> list = ['人生苦短','我选 python','2223333','+-*/']
- >>> list[3] = 123456
- >>> list
- ['人生苦短', '我选 python', '2223333', 123456]
- >>> list[0] = 'pypy'
- >>> list
- ['pypy', '我选 python', '2223333', 123456]
4. 嵌套列表
嵌套列表即列表里含有其它列表
1. 创建嵌套列
(1). 直接创建:
- >>> list1 = [['ab','cd','ee'],[12,34,56],['p','y','t']]
- >>> list1
- [['ab', 'cd', 'ee'], [12, 34, 56], ['p', 'y', 't']]
(2). 间接创建:
- >>> a = [1,2,34,66]
- >>> b = ['ww','tt','yy']
- >>> c = ['df','hh',99]
- >>> list2 = [a,b,c]
- >>> list2
- [[1, 2, 34, 66], ['ww', 'tt', 'yy'], ['df', 'hh', 99]]
2. 嵌套列表的索引
类似 c,java 中的二维数组. 用中括号组合来进行索引. 嵌套列表的索引很有趣. 它是切片和索引的组合性操作.(其实我觉得索引本质就是切片, 只不过切片的 end 值为 start+1, 且步长为 1)
你一次性只能查询嵌套列表中某个子列表的某个元素或多个原色, 而不能查询多个子列表的统一索引位置的某个元素, 如果你非要这么做, 查询结果会是某一个子列表.
- >>> list2
- [[1, 2, 34, 66], ['ww', 'tt', 'yy'], ['df', 'hh', 99]]
- >>> list2[:][1]
- ['ww', 'tt', 'yy']
- >>> list2[:][0]
- [1, 2, 34, 66]
- >>> list2[0][:]
- [1, 2, 34, 66]
- >>> list2[:-1][0]
- [1, 2, 34, 66]
- >>> list2[0][:-1]
- [1, 2, 34]
- >>>
5. 列表的内置函数
函数名 | 描述 |
---|---|
len(list) | 列表元素个数 |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list(seq) | 将元组转换为列表 |
list.append(obj) | 在列表末尾添加新的对象 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index, obj) | 将对象插入列表 |
list.pop([index=-1]]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort(cmp=None, key=None, reverse=False) | 对原列表进行排序 |
list.clear() | 清空列表 |
list.copy() | 复制列表 |
来源: http://www.bubuko.com/infodetail-2723668.html