Python入门(三):数据结构
- 2019 年 12 月 26 日
- 筆記
01
字符串 str
- 可以使用单引号、双引号、三引号指代字符串。
- 获取字符串:
使用数字下标(python索引从0开始)
使用切片
[m:n]表示第m至n-1个元素,
[:m]表示开始至m-1个元素,
[m:]表示第m个元素至字符串末尾
[-1]表示最后一个元素

- 字符串格式化:
用+完成字符串拼接,无分隔符
用"分隔符".join完成字符串拼接,且自定义分隔符
使用format函数,{}是占位符,用来存储变量

- 字符串常用方法列表:
string.lower():转换 string 中的大写字母为小写
string.upper():转换 string 中的小写字母为大写
string.title():所有单词都是以大写开始
string.lstrip():截掉 string 左边的空格
string.rstrip():删除 string 字符串末尾的空格
还有很多方法,这里就不一一列举了。
02
列表 list
保存有序项集合、大小可变(可以增加和删除项)的数据结构。
- 索引和切片
索引从0开始,至列表长度-1
索引可以是负数,代表从列表末尾往前数
切换list[begin:end],获取切换list内元素,从begin开始,至end结束,不包含end
索引和切换对应的值都可以修改

- 常用方法
list.append(item),在列表末尾新增一个元素
list.extend(list),在列表末尾新增一个列表
list + list,返回一个新的List合并的list
list.clear(),清空列表中的所有元素
len(list),返回列表的元素个数

for i in list:
print(i) #按顺序遍历列表
for idx,value in enumerate(list):
print(idx, value) #用下标和数值遍历列表
for idx in range(len(list)):
print(idx, list[idx]) #用下标和数值遍历列表

list.sort(key=None, reverse=False),对list进行排序
list.reverse(),翻转list自身

- 列表推导式
列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。

case1:计算10以内的所有偶数的平方,存入一个列表 如果不用列表推导式:squares = []for x in range(10): ifx%2 == 0: squares.append(x*x) 如果使用列表推导式:squares = [x*x for x in range(10) if x %2== 0]

03、元组 tuple
- 一种类似列表的数据序列类型
- 要点是不可变,不可以添加、删除、更新元素
- 用两个小括号包括起来,元素之间用逗号分隔
- 创建方式
student = (1001, 'xiaoming', 20)# 元组的括号可以省略:tup = "a", "b", "c", "d"# 创建空元组和单个元素元组的方式:tup = ()tup = (50,)
- 索引和切片
# 元组和列表一样支持索引和切片,但是不能更改元素# 得到单个元素tup[idx]# 得到切片,类型也是元组tup[begin:end]# 给元素赋值将会报错student[0] = 1002 会报错

- 常用方法:
len(tup),得到元素个数tup1+tup2,合并两个元组,得到一个新的元组e in tup,判断元素是否在元组中for x in tup: print(x),用for循环遍历元组tuple(list),把一个列表变成元组x,y,z=tuple,将tuple的元素挨个拆包赋值给x,y,z

04
字典 dict
字典dict是一种KEY:VALUE的数据结构,可以根据KEY设置和获取对应的VALUE
语法: dict = {key1:value1, key2:value2}举例: d = {"id":123, "name":"liming"}
- 字典dict和列表list的对比
列表用顺序数字做索引,字典用Key做索引,相当于给每个元素进行了命名("3号学生"和"xm同学"的区别)
如果有一个数据列表:[(11, A), (12, B), (13, C)],要在其中查找B这个条目,需要遍历列表查找;
如果使用字典{A:11, B:12, C:13},直接使用get(B)取出,字典具有超级快的按KEY查找速度;
- 创建方式:
d = {"id":123, "name":"liming", "age":20}创建空列表:d = {}
- 获取数据:
print(d["id"], d["name"])如果key不存在就报错,比如d["xx"]报错
- 新增、修改数据:
d["id"] = 456如果"id"这个key不存在,就新增一个键值对如果"id"这个key已经存在,就修改"id"对应的value值
- 特点:
字典的KEY一定不会重复的字典的Key要求不可变,可用数字、字符串、元组,不能是可变的列表

- 常用方法:
len(dict) 字典的key/value对个数,也等于key的个数str(dict) 字典的字符串形式type(dict) 字典的类型,输出dictdict.clear() 清空字典的所有内容dict.get(key, default) 获取key的value内容,如果key不存在,返回默认值defaultkey in dict 判断key是否在dict的键中dict1.update(dict2) 将dict2的所有键值对,更新到dict1,也就是合并字典{x:x*x for x in range(10)} 字典推导式

- 三种常用的字典遍历方法:
dict.items() 以列表返回可遍历的(键,值)元组数组,常用于for遍历dict.keys() 以列表返回字典所有的键dict.values() 以列表返回字典的所有的值

05
集合 set
集合set是一组无序并且没有重复元素的KEY集合;
set跟dict的key类似,区别在于set没有value;
key无序,所以set不支持数字索引和切片(dict也不支持);
- 使用场景:
1、判断某个元素是否在集合set中(set比list速度快);
2、消除输入数据的重复元素;
- 特点:
和dict一样,set的key只能是数字、字符串、元组等不可变对象,不能是列表等可变对象。
- 创建方式:
创建一个空集合:s = set()创建一个初始化集合方法1:s = {1,2,2,3}创建一个初始化集合方法2:s = set([1,2,2,3]) 这里的参数可以是列表、元组、字符串创建空集合不能用s = {},因为这样创建了dict字典
- 常用方法:
len(set) 集合的元素个数for x in set 集合的遍历set.add(key) 新增一个KEY,如果有重复会自动去重set.remove(key) 删除一个KEYset.clear() 清空setx in set 判断元素是否在set集合中s1 & s2或者s1.intersection(s2) 求两个集合的交集s1 | s2或者s1.union(s2) 求两个集合的并集s1 - s2或者s1.difference(s2) 求两个集合的差集s1.update(s2) 将s2的所有key更新到s1,会去除重复集合推导式:s = {x for x in 'abcd' if x not in 'bc'}
