python之_常用数据结构
python常用数据结构:
1)列表
2)元组
3)集合
4)字典
列表的定义:
python中可以通过组合一些值得到多种复合型数据类型。列表是最常用的数据结构。列表通过方括号起、逗号分隔的一组值得到。一个列表可以包含不同类型的元素,但通常使用时各个元素类型相同
列表的特性(列表中定义的方法):
1)list.append(x):在列表的末尾添加一个元素。相当于a[len(a):]=[x]
2)list.insert(i,x):在给定的位置插入一个元素。第一个参数是要插入的元素的索引,以a.insert(0,x)插入列表头部,a.insert(len(a),x)等同于a.append(x)
3)list.remove(x):移除列表中第一个值为x的元素。如果没有这样的元素,则抛出ValueErro异常。代码示例:
a=["h","o",'n'] try: a.remove("oo") print(a) except: print("有异常")
4)list.pop([i]):删除列表中给定位置(index)的元素并返回它。如果没有给定位置(但不能超出列表的长度),a.pop()将会删除并返回列表中最后一个元素。代码示例:
#删除下标为1的元素:“o" a=["h","o",'n'] a.pop(1) print(a)
#删除最后一个元素(下标为-1):“n" a=["h","o",'n'] a.pop() print(a)
#下标超出长度,会报错 a=["h","o",'n'] a.pop(3) print(a)
5)list.sort(key=None,reverse=False):对列表中的元素进行排序(参数可用于自定义排序,解是请参见sorted())。key 可指定一些规则,reverse 默认值是False,可以给它赋值成True,那就是反向排序,可以自定义key函数排序)。自定义key代码示例如下:
#自定义key规则实现反转(对应的元素平方作比较决定元素的位置) a=[-2,1,5] def f(x): return x*x a.sort(key=f) print(a)
6)list.reverse():反转列表中的元素
a=[3,1,5] a.reverse() print(a)
7)list.clear():删除列表中所有的元素。相当于 del a[:]。代码示例:
a=[1,2,3,5] a.clear() print(a)
8)list.extend(iteable):使用可迭代对象中的所有元素来扩展列表。相当于a[len(a):]=iterable。代码示例:
a=[1,2,3,5] iterable=[7,8,9] a.extend(iterable) print(a)
输出结果为:
D:\pythonProject\venv\python基础\Scripts\python.exe D:/pythonProject/venv/python基础/python常用数据结构.py [1, 2, 3, 5, 7, 8, 9] Process finished with exit code 0
重点注意,这和a.append不同,a,append是会将整个iterable当作一个整体,作为一个元素放到a列表中。代码示例和结果输出如下:
a=[1,2,3,5] iterable=[7,8,9] a.append(iterable) print(a)
结果:
D:\pythonProject\venv\python基础\Scripts\python.exe D:/pythonProject/venv/python基础/python常用数据结构.py [1, 2, 3, 5, [7, 8, 9]] Process finished with exit code 0
9)list.index(x,start,end]):返回列表第一个值为x的元素的从零开始的索引。如果没有这样的元素,将抛出valueerror异常。代码示例如下:
a=[1,2,3,5] print(a.index(2, 0, 3))
结果将是1(2对应的列表中的下标是1),有返回值且返回值为对应的下标
10)list.count(x):返回元素x在列表中出现的次数。代码示例如下:
a=[1,2,1,3,1,1,1,5,[1,1,2,1]] print(a.count(1))
结果:
D:\pythonProject\venv\python基础\Scripts\python.exe D:/pythonProject/venv/python基础/python常用数据结构.py 5 Process finished with exit code 0
11)list.copy():返回列表的一个浅拷贝,相当于a[:]。代码示例:
a=[1,2,1,3,1,1,1,5,[1,1,2,1]] print(a.copy())
结果:
D:\pythonProject\venv\python基础\Scripts\python.exe D:/pythonProject/venv/python基础/python常用数据结构.py [1, 2, 1, 3, 1, 1, 1, 5, [1, 1, 2, 1]] Process finished with exit code 0
总结注意:
insert、remove或者sort方法,之修改列表,没有返回值(他们的返回值都是None)。这是python中所有可变数据结构的设计原则。并非所有数据或可以排序或比较(字符串和数字等)
列表推导式:
列表推导式提供了一个更简单的创建列表的方法。常见的用法是将某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某种特定条件元素来创建子序列
练习:如果我们想生成一个平方列表,比如[1,4,9...],使用for循环应该怎么写,使用列表生成应该怎么写?代码示例:
#生成一个平方列表,比如[1,4,9...],for循环实现 l=[] for i in range(1,10): l.append(i*i) print(l)
#生成一个平方列表,比如[1,4,9...],列表推导式实现 l=[i*i for i in range(1,10)] print(l)
#生成一个平方列表,比如[1,4,9...],列表推导式实现。 #列表里面除了放for循环,也可以带上if判断语句,还可以放嵌套循环
#等同于两层for循环。外层循环i,内层循环j
l=[i*j for i in range(1,10) for j in range(1,10) if i!=1] print(l)
------------------------------------------------------分割线--------------------------------------------------------------------------------------------------------------------------
元组:tuple是只可读,而不支持写的,所以,出现了关于tuple赋值的问题,就会出现问题。代码示例如下:
#元组 a=(1,2,3) a[0]=5 print(a)
结果提示:TypeError: 'tuple' object does not support item assignment
如果元组中嵌套列表,元组中的列表的值是可以变的。代码示例如下:
#元组 b=[4,5,6] a=(1,2,3,b) #打印元组各元素内存地址 print(id(a[0])) print(id(a[1])) print(id(a[2])) print(id(a[3])) #打印第四个元素(列表)第一个值 print(a[3][0]) print(id(a[3][0])) #将列表第一个值赋值,看看赋值是否可以。结果发现是可以的 a[3][0]="a" print(a[3][0]) print(a) #重新打印赋值后的地址,发现是不变的 print(id(a[3])) print(id(a[3][0]))
元组常用特性(方法):
1)tuple.count():返回元组中某个元素出现的次数。代码示例如下:
a=(1,2,3,1) print(a.count(1))
2)tuple.index(x):返回元组中x元素首次出现的位置的下标,若没有这个元素,则抛出异常。代码示例如下:
a=(1,2,"a",3,2,"a",1) print(a.index("a"))
运行结果:2
a=(1,2,"a",3,2,"a",1) try: print(a.index("b")) except: print("抛出异常")
运行结果:抛出异常
---------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------------------
集合:集合是由不重复元素组成的无序的集。它的基本用法包括成员检测和消除重复元素。它可以使用{}或者set()函数创建集合。要创建一个空集合只能用set()而不能用{}
#集合 #定义一个集合,里面元素只有一个 a={1} #定义一个空集合,必须用set(),不可以写成b={},因为这样写,python解释器会把它当作一个空字典 b=set() #查看a和b的类型,都是集合 print(type(a)) print(type(b)) #查看a和b集合的长度,a长度是1,b长度是0 print(len(a)) print(len(b))
---------------------------------------------------------------------------分割线----------------------------------------------------------------------------------------------------------------
字典:字典是以【关键字】为索引。关键字可以是任意不可变类型。通常是字符串或数字。如果一个元组只包含字符串、数字或元组,那么这个元组也可以作为关键字
字典特性(常用方法):
1)dict.keys():返回字典的所有key值
2)dict.values():返回字典的所有values值
3)dict.pop("key"):返回要删除的key值,并将字典修改(修改后的字典为去掉删除的key值键值对剩余的值)
4)dict.fromkeys((tuple):"a"):定义字典,tuple的每个元素都是key值,且对应的键值都是"a"。代码示例:
m={} m=m.fromkeys([1,2,3],"a") #也可以是元组 print(m)
结果:{1: 'a', 2: 'a', 3: 'a'}
5)字典也可以有字典推导式。代码示例如下:
#字典推导式 y={i:i*i for i in range(1,10)} print(y)
结果:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
浙公网安备 33010602011771号