目录 一、Python的列表 list [1,“a”] 二、Python的元组 Tuple (1,“a”) 三、Python的字典 dict {k1:v1,k2:v2} 四、Python的集合 set {1,2,“a”} 五、四种数据结构对比 六、四种数据结构函数、方法大全
个人简化的理解 列表 约等于 数组 元组 约等于 不可修改的数组 字典 约等于 键值数组 集合 约等于 不可重复的键
一、Python的列表 list[1,“a”] 列表list有序、可变。可增、删、改其中的数据。 创建空列表:data=[] 创建有值列表:data=[1,2,3,4]
列表的索引和切片(和字符串类似) 索引:list[数字下标idx],访问某个元素,idx>=0 and idx<=len(list)-1,idx可以为负数,从最后往前计数。 切片:list[开始值:结束值:步长],三个参数皆可为负数,原理同字符串切片。 切片可以重新赋值,可以和之前的长度不一样。(字符串不行) 例1 data=[1,2,'a','b','c'] data[2]="g" print(data) 输出结果:[1, 2, 'g', 'b', 'c'] 例2 data=[1,2,'a','b','c'] data[1:2]=["g","g","g","g"] print(data) 输出结果:[1, 'g', 'g', 'g', 'g', 'a', 'b', 'c'] 列表的常用方法 list.append(3),在列表末尾新增一个元素。 list.extend([4,‘a’,6]),在列表末尾新增一个列表。 list1 + list2 ,两个列表相加,返回一个新的列表。 list.clear() ,清空列表中的所有元素。 len(list) ,返回列表的元素个数 列表的遍历 例1 data=[1,2,'a','b','c'] for i in data: print (i) 输出结果: 1 2 a b c 例2(重点语句:range(len(data))) data=[1,2,'a','b','c'] for i in range(len(data)): print (i,data[i]) 输出结果: 0 1 1 2 2 a 3 b 4 c 例3(重点enumerate关键字) data=[1,2,'a','b','c'] for i,j in enumerate(data): print(i,j) 输出结果: 0 1 1 2 2 a 3 b 4 c 列表的排序 list.reverse(),将整个列表元素翻转。 list.sort(reverse=False),reverse为F时正序排列;为T时倒序排列(sort()中可以为空,默认为正序排列)。 方便的列表推导式 列表推导式又称列表解析式,提供一种简明扼要的方法来创建列表。 例1: data=[3,4,50,6,8,1,2,33,11] data2 = [i*i for i in data if i>10] #满足条件后执行i*i; for循环遍历序列;条件语句。 print(data2) 输出结果:[2500, 1089, 121] 例2: data=[3,4,50,6,8,1,2,33,11] aa="-".join( [str(i) for i in data] ) print(aa) 输出结果:3-4-50-6-8-1-2-33-11 例3: fin = open("data.txt") aa=[i.strip().split("\t")[1] for i in fin if len(i.strip())>0] print(aa) fin.close() 先for循环,将txt文档中每行读取出来,判断是否为空行, 如果不是空行,就strip去首尾空格换行,再用"\t"分割,并将第二个元素存放进列表。二、 Python的元组 Tuple(1,“a”) 一种类似列表的数据序列类型,不可变,不可添加,不可删除,不可修改元素
创建方式: 创建空元组:tup=() 创建有值元组:tup=(1,‘a’,‘b’,4) 创建单个元素元组:tup(5,) 这个要注意创建单个元组时不能省略后面的逗号。 创建多个元素的元组时,也可省略小括号:tup=1,‘a’,‘b’,4
元组的索引和切片 元组和列表一样支持索引和切片,但是不能更改元素。 tup[下标数字idx] 对元组进行切片,得到的结果还是元组。 不能对元组中的元素进行赋值。
元组支持的方法 tuple(list) ,把一个列表变成一个元组 a,b,c = tup ,把元组中的元素拆包挨个给a,b,c。前后数目要一样多。 len(tup) ,得到元素的个数 tup1 + tup2 ,合并两个元组,得到一个新元组 ‘a’ in tup ,判断元素是否在元组中 for i in tup: ,用fox循环遍历元组
三、Python的字典 dict{k1:v1,k2:v2} 字典是一种key:value的数据结构,可以根据key设置和获取对应的value。
创建方式 d = {key1:value1,key2:value2} d = {} 创建空字典 d = {“id”:123,“name”:“xiaoming”,“age”:20}
获取数据 print(d[“id”],d[“name”]) 如果key值不存在,就会报错。
新增修改数据 d[“id”]=456 如果“id”这个key不存在,就新增一对键值 如果“id”这个key存在,就修改对应value的值 字典的key不能重复,不能更改。 key可以是数字,字符串,元组,不能是可变的列表。
字典的常用方法 len(dict) ,字典key:value的对数。 dict.clear() ,清空字典 str(dict) ,将整个字典转为字符串形式。 key in dict ,判断key是否在dict的键中。 dict.get(key,“bucunzai”) ,获取key的内容,如果key不存在,返回默认值"bucunzai" dict1.update(dict2) ,将dict2的所有键值对,加到dict1后面。
例:**字典推导式** d = {"id":11,"name":"xiaoming","age":22} bb={i:d[i] for i in d if len(str(d[i]))<3} print(bb) 字典的遍历 dict.items() ,以列表返回可遍历的(键,值)元组数组,常常用于for遍历。 dict.keys() ,以列表返回字典所有的键 dict.values() ,以列表返回字典所有的值 例1:打印字典的key,换成values也可以。 for i in dict.keys() : print(i) 例2:这个因为返回的列表中每队(键,值)是以元组存在的, 所以这里通过i,j两个变量,直接将元组中对应的两个值取出来。(不是特别理解) d = {"id":11,"name":"xiaoming","age":22} for i,j in d.items(): print(i,j)四、Python的集合 set 集合是一组无序、没有重复元素的key的集合,和字典非常类似。和字典一样,不能通过下标数字的方式访问元素,所以也都不支持切片。 主要用于:去重元素;访问效率高。
创建方式: 创建空集合:s = set() 创建集合:s = {1,2,3,4} 转换为集合:s = set(列表、元组、字符串) 创建空集合不能用s = {} ,因为这是创建了一个字典dict。
集合的常用方法 len(set) ,取集合的元素个数 for i in set ,对集合进行遍历 set.add(key) ,新增一个key,如果有重复会自动去重。这时的key不能为列表等可变的内容。 set.remove(key) ,删除一个key set.clear() ,清空set x in set ,判断元素是否在set集合中 set1.update(set2) ,将set2中所有key添加到set1中,会去重。 set1 & set2 或者set1.intersection(set2) ,求两个集合的交集(两个集合中都含有的元素) set1 | set2 或者set1.union(set2) ,求两个集合的并集(两个集合所有不重复值) set1 - set2 或者set1.difference(set2) ,求两个集合的差集(在set1集合中,不在set2集合中的元素)
集合推导式:s = {x for x in “abcd” if x not in “bc”} 这个和字典的推导式很接近,区别在于最前面的问题,一个是X;一个是X:X*X。
五、四种数据结构对比 六、四种数据结构函数、方法大全
# 个人简化的理解 # 列表 list[1,"a"] 约等于 数组 # 元组 tuple(1,"a") 约等于 不可修改的数组 # 字典 dict{k1:v1,k2:v2} 约等于 键值数组 # 集合 set{1,2,"a"} 约等于 不可重复的键 #-----------------------------------list 列表 [ ] list1 = [88,99,11,22,33,66,22] list2 = ["a","ee","b","cc"] list3 = ["a",99,11,"ee","af"] #函数 print(len(list1))#取列表元素个数 print(max(list2))#取列表元素中的最大值。元素类型要相同。 print(min(list1))#取列表元素中的最小值。元素类型要相同。 seq = (1,2,3,4) print(list(seq))#将一个元组转为列表 #方法 list1.append("abc")#在列表1后面添加对象(可以是元素,列表,元组),对象转为1个元素 print(list1) list1.extend(list2)#在列表1后面添加对象(可以是元素,列表,元组),对象转为多个元素 print(list1) print(list1.count(22))#统计22在列表中出现的次数 print(list1.index("a",5,10))#在5-8位置中,找到a的位置数,未找到报错。 list1.insert(10,"dddd")#在10的位置插入对象(可以是元素,列表,元组),对象转为1个元素 print(list1) print(list1.pop(1))#删除指定下标的元素,可以为负数,返回要删除的元素内容 print(list1) print(list1.remove(88))#删除指定名称的元素,无返回值。 print(list1) list1.reverse()#将列表元素倒序排列 print(list1) list2.sort(reverse=True)#对列表进行排序,T降序,F升序。元素类型要相同。 print(list2) list3.clear()#清空列表 print(list3) list3 = list2.copy()#复制list2给list3 print(list3) print() #-----------------------------------tuple 元组 ( ) tuple1 = ("a","99","11","ee","af") #函数 #len、max、min #取元素个数;最大值;最小值(与list相同) print(tuple(list2))#将列表转化为元组 #-----------------------------------dict 字典 {k1:v1,k2:v2} dict1 = {"name":"xiaoming","age":22,"class":"first","china":"明明"} #函数 #len、max、min #取元素个数;最大值;最小值(与list相同) print(str(dict1)) #将字典转为字符串 #方法 #print(dict1.clear())#清空字典所有元素 dict2 = dict1.copy() #对一个字典的浅复制 dict3 = dict1 #dict3对dict1进行了深拷贝[*这样拷贝两个字典值会同步发生变化] dict3["age"] = 100 print(dict1,dict2,dict3) list1 = ["cc","dd","ee","ff","hh"] print(dict2.fromkeys(list1,"AA"))#创建一个新字典dict2,键为tup1,所有健的值为"AA" print(dict1.get("age","BB"))#取键age的值,如果没有该键就返回"BB" print(dict1.setdefault("age1","BB"))#取键age的值,如果没有该键就返回"BB",并创建该键 print("name" in dict1)#判断键"name"是否在字典dict1中。 for i,j in dict1.items(): #将字典的键和值以列表的形式返回 print(i,j) print(list(dict1.keys()))#以列表的形式返回dict1的所有键 print(list(dict1.values()))#以列表的形式返回dict1的所有值 print(dict1.update(dict2))#将dict2的键值更新至dict1中,如果有重复键,值以dict2为准 print(dict1) print(dict1.pop("age","CCC"))#删除键age,成功返回该键的值,失败返回CCC print(dict1.popitem())#删除字典中最后一组键值,返回删除的键值。 #$save #-----------------------------------set 集合 {1,2,"a"} set1 = {1,2,"aa","bb","cc"} print(set1.add("dd"))#向set1集合中添加[一个]元素,如果已存在,则不添加 print(set1.update(["ee","hh","ab"]))#向set1集合中添加[一组],如果已存在,则不添加,无返回 print(set1) #print(set1.clear())#删除集合set1中所有元素 set2 = set1.copy()#复制set1给set2 set2 = {7,8.9,10,1,2} print(set1,set2,set1.difference(set2))#取set1和set2的差集,结果返回新集合 print(set1.difference_update(set2))#取set1和set2的差集,结果返回给set1 print(set1) print(set1.discard("aa"))#删除set1中指定元素 print(set1) set1 = {1,2,"aa","bb","cc"} print(set1,set2,set1.intersection(set2))#取set1和set2的交集,结果返回新集合 print(set1.intersection_update(set2))#取set1和set2的交集,结果返回给set1 print(set1) set1 = {1,2,"aa","bb","cc"} set2 = {7,8.9,10,1,2} print(set1.isdisjoint(set2))#判断两个集合有无相同元素,没有返回真 print(set1.issubset(set2))#判断set1包含set2,包含返回真 print(set1.issuperset(set2))#判断set2包含set1,包含返回真 print(set1.pop())#随机移除set1中的一个元素 print(set1.remove("aa"))#移除set1中的指定元素,如果没有指定元素报错。 print(set1) print(set1,set2,set1.symmetric_difference(set2))#移除两个集合中都存在的元素,结果返回新集合 print(set1.symmetric_difference_update(set2))#移除两个集合中都存在的元素,结果返回给set1 print(set1) print(set1.union(set2))#返回两个集合中的所有不重复元素