数据结构的含义
在学习数据结构之前, 我们先来了解下数据结构的含义. 数据结构是通过某种方式 (例如对元素进行编号) 组织在一起的数据元素的集合, 这些数据元素可以是数字或者字符, 甚至可以是其他数据结构. 在 Python 语言中, 最基本的数据结构是序列(sequence). 序列中的每个元素被分配一个序号 ---- 即元素的位置, 称为索引或下标, 索引从 0 开始递增.
典型的序列包括列表, 元组和字符串. 其中, 列表是可变的(可修改), 而元组和字符串是不可变的(一旦创建了就是固定的). 列表, 元组和字符串也是较常用的数据结构.
本篇内容主要讲解 Python 的列表, 元组, 字典, 下篇将会介绍字符串的操作.
列表 list, 使用 [] 定义,[] 中的各个元素, 用逗号分隔.
例子
定义一个名为 all_star, 包含 Kobe,TMAC,LBJ 元素的列表
- >>> all_star = ["Kobe","TMAC","LBJ"]
- >>> print(all_star)
- ['Kobe', 'TMAC', 'LBJ']
列表也可以包含列表, 例如:
- >>> east_star = ["Irving","Wall","Love"]
- >>> west_star = ["Curry","KD","Harden"]
- >>> all_star = [west_star,east_star]
- >>> print(all_star)
- [['Curry', 'KD', 'Harden'], ['Irving', 'Wall', 'Love']]
或者
- >>> all_star = [["Kobe","TMAC"],["LBJ","BOSH"]]
- >>> print(all_star)
- [['Kobe', 'TMAC'], ['LBJ', 'BOSH']]
列表支持增删改查
所有序列类型都可以进行某些特定操作, 由对象属性决定. 这些操作包括: 索引 (indexing), 切片(sliceing), 加(adding), 乘(multiplying) 以及检查某些元素是否属于序列成员, 计算序列长度, 找出最大, 最小元素的内置函数.
查, 使用单个索引一次能取出一个元素, 使用切片, 可以取出指定范围内的元素, 分片通过两个冒号相隔的两个索引值实现.
例子 1, 单个索引获取元素, 获取 all_star 列表中名叫 Kobe 的元素
- >>> all_star = ["Kobe","TMAC","LBJ"]
- # 元素的下标也就是索引, 从 0 开始, 逐个递增. Kobe 的元素下标为 0,TMAC 为 1,LBJ 为 2
- >>> print(all_star[0])
- Kobe
- >>> all_star = [["Kobe","TMAC"],["LBJ","BOSH"]]
- >>> print(all_star[0][0])
- Kobe
例子 2, 切片的使用
- >>> all_star = ['Curry', 'KD', 'Harden','Irving', 'Wall', 'Love']
- # 索引范围, 左侧包含, 右侧不包含, 当想取前 3 个元素的话, 切片范围为 0:3.
- >>> all_star[0:3]
- ['Curry', 'KD', 'Harden']
- # 从第一个元素, 取到最后一个元素
- >>> all_star[1:]
- ['KD', 'Harden', 'Irving', 'Wall', 'Love']
- # 忽略第一个和最后一个元素
- >>> all_star[1:-1]
- ['KD', 'Harden', 'Irving', 'Wall']
- # 从第二个元素开始, 每隔一个取一个, 2 表示步长, 默认步长为 1.
- >>> all_star[1:-1:2]
- ['KD', 'Irving']
- # 在下标为 2 的位置, 从右向左取值, 直到最后一个值.
- >>> all_star[2::-1]
- ['Harden', 'KD', 'Curry']
增, append(),insert()
例子:
- >>> all_star
- ['Curry', 'KD', 'Harden', 'Irving', 'Wall', 'Love']
- # 把元素添加到最后
- >>> all_star.append("LBJ")
- >>> all_star
- ['Curry', 'KD', 'Harden', 'Irving', 'Wall', 'Love', 'LBJ']
- # 把元素插入到指定位置
- >>> all_star.insert(2,"Westbrook")
- >>> all_star
- ['Curry', 'KD', 'Westbrook', 'Harden', 'Irving', 'Wall', 'Love', 'LBJ']
改, 采用直接替换的方式
例子:
- >>> all_star
- ['Curry', 'KD', 'Westbrook', 'Harden', 'Irving', 'Wall', 'Love', 'LBJ']
- # 为需要替换的元素下标赋予新值
- >>> all_star[6]="George"
- >>> all_star
- ['Curry', 'KD', 'Westbrook', 'Harden', 'Irving', 'Wall', 'George', 'LBJ']
删, remove(),pop(),del
例子:
- #remove()方法直接删除内容
- >>> all_star.remove("LBJ")
- >>> all_star
- ['Curry', 'KD', 'Westbrook', 'Harden', 'Irving', 'Wall', 'George']
- #pop()方法根据索引值删除内容, 并返回删除的值
- >>> all_star.pop(6)
- 'George'
- >>> all_star
- ['Curry', 'KD', 'Westbrook', 'Harden', 'Irving', 'Wall']
- #del 命令根据索引值删除内容, 没有返回
- >>> del all_star[5]
- >>> all_star
- ['Curry', 'KD', 'Westbrook', 'Harden', 'Irving']
- #del 命令删除列表对象
- >>> del all_star
- >>> all_star
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- NameError: name 'all_star' is not defined
一些内置函数:
count() 统计元素出现的次数
- >>> list1 = [1,2,3,4,5,4,3,2,1,1,0,1]
- >>> list1.count(1)
- 4
extend() 在列表末尾一次性追加另一个序列中的多个值, 有扩展列表的功能.
- >>> list1 = [1,2,3]
- >>> list2 = [4,5,6]
- >>> list1.extend(list2)
- >>> list1
- [1, 2, 3, 4, 5, 6]
index() 获取索引值, 当我们知道一个序列的值而不知道期下标是多少, 可以使用 index 函数
- >>> list1
- [1, 2, 3, 4, 5, 6]
- >>> list1.index(4)
- 3
reverse() 调转序列顺序
- >>> list1 = [1,2,3,4,5,6]
- >>> list1.reverse()
- >>> print(list1)
- [6, 5, 4, 3, 2, 1]
sort() 排序
- >>> list1 = [1,9,3,7,2,6,0]
- >>> list1.sort()
- >>> list1
- [0, 1, 2, 3, 6, 7, 9]
- >>> list1.sort(reverse=True)
- >>> list1
- [9, 7, 6, 3, 2, 1, 0]
len() 获取序列长度>>> len(list1) 7
max() 获取序列的最大值>>> max(list1) 9
min() 获取元素的最小值>>> min(list1) 0
list() 适用于所有类型的序列. 字符串不能像列表一样被修改, 所以有时根据字符串创建列表会很有用
- >>> h = list("hello")
- >>> h
- ['h', 'e', 'l', 'l', 'o']
join() 可以将一个由字符串组成的列表转换为字符串
- >>> ''.join(h)
- 'hello'
元组 Tuple, 只读列表
元组使用 () 定义,()中的元素使用逗号隔开. 元组也可以通过索引和切片获取元素的值, 方法和列表一样.
字典 Dictionary
字典是 Python 中唯一的映射类型, 采用键值对的形式无序存储数据, 键不可修改, 且唯一; 值可以修改.
创建方法: 使用 {} 定义字典
- >>> dic = {'name':'wt'}
- >>> dic=dict((['name','wt'],['a','b'],))
对字典的值进行初始化:
- >>> all_star = dict.fromkeys(['work','hobby'],'basketball')
- >>> print(all_star)
- {'work': 'basketball', 'hobby': 'basketball'}
字典也支持增删改查
增
例子
- >>> dic1 = {'name':'wt'}
- >>> dic1['age'] = 21
- >>> dic1
- {'name': 'wt', 'age': 21}
改: 这里介绍 3 种改的方式
例子
- >>> dic1
- {'name': 'wt', 'age': 21}
- # 直接对键进行赋值, 有则修改, 没有就会创建
- >>> dic1['name'] = 'Kobe'
- >>> dic1
- {'name': 'Kobe', 'age': 21}
- # 使用内置的 setdefault 方法, 如果键存在, 不改动, 返回字典中该键对应的值; 如果不存在, 增加新的键值对, 并返回新增键值对值
- >>> dic1.setdefault('age',22)
- 21
- >>> dic1
- {'name': 'Kobe', 'age': 21}
- #update 方法, 当 dic1 字典中有就更新, 没有则将 dic2 字典中的键值对添加到 dic1 中
- >>> dic1 = {'name':'Kobe','age':21}
- >>> dic2 = {'name':'TMAC','hobby':'basketball'}
- >>> dic1.update(dic2)
- >>> dic1
- {'name': 'TMAC', 'age': 21, 'hobby': 'basketball'}
查:
例子
- >>> dic1 = {'name': 'TMAC', 'age': 21, 'hobby': 'basketball'}
- # 获取指定键的值
- >>> dic1['name']
- 'TMAC'
- # 通过 keys 方法获取字典包含的键
- >>> dic1.keys()
- dict_keys(['name', 'age', 'hobby'])
- # 通过 values()方法获取字典的值
- >>> dic1.values()
- dict_values(['TMAC', 21, 'basketball'])
- # 通过 items()方法获取字典的所有键值对
- >>> dic1.items()
- dict_items([('name', 'TMAC'), ('age', 21), ('hobby', 'basketball')])
删:
例子
- >>> dic1
- {'name': 'TMAC', 'age': 21, 'hobby': 'basketball'}
- # 使用 del 命令删除指定键的值
- >>> del dic1['hobby']
- >>> dic1
- {'name': 'TMAC', 'age': 21}
- #clear()方法清空字典
- >>> dic1.clear()
- >>> dic1
- {}
- #pop()方法删除指定键的值, 并返回该值
- >>> dic1 = {'name':'Kobe','age':21}
- >>> dic1.pop('name')
- 'Kobe'
- >>> dic1
- {'age': 21}
- #popitem()方法随机删除键值对, 并返回删除的键值对
- >>> dic1 = {'name':'Kobe','age':21}
- >>> dic1.popitem()
- ('age', 21)
字典嵌套: 字典里可以包含字典, 列表等.
- books = {
- "日本作家" : {
- "村上春树":["且听风吟","没有女人的男人们","1Q84","多崎作"],
- "井上靖":["敦煌"],
- "东野圭吾":["白夜行","解忧杂货铺","放学后"]
- },
- "欧美作家" : {
- "昆德拉":["庆祝无意义","不能承受生命之轻"],
- "菲茨杰拉德":["了不起的盖茨比"]
- },
- "中国作家" : {
- "路遥":["平凡的世界","人生"],
- "金庸":["天龙八部","射雕英雄传","笑傲江湖"]
- }
- }
- >>> print(books['日本作家']['村上春树'][1])
没有女人的男人们
字典的排序: 字典默认根据键排序, 列表根据值排序
- >>> dic1 = {24:'Kobe',1:'TMAC',30:'Curry',23:'LBJ'}
- >>> dic1
- {24: 'Kobe', 1: 'TMAC', 30: 'Curry', 23: 'LBJ'}
- # 字典默认按键排序
- >>> print(sorted(dic1.items()))
- [(1, 'TMAC'), (23, 'LBJ'), (24, 'Kobe'), (30, 'Curry')]
- # 按值排序
- >>> print(sorted(dic1.values()))
- ['Curry', 'Kobe', 'LBJ', 'TMAC']
使用 for 循环, 打印字典的键值
- # 打印键
- >>> for i in dic1:
- ... print(i)
- ...
- 24
- 1
- 30
- 23
- # 打印键值
- >>> for i in dic1:
- ... print(i,dic1[i])
- ...
- 24 Kobe
- 1 TMAC
- 30 Curry
- 23 LBJ
来源: http://www.bubuko.com/infodetail-2729683.html