本文用于学习Python内置的四种基本数据结构!!!
import numpy as np '''Python3 数据结构 列表可以被修改,而字符串和元组不能''' #表示一个列表,列表元素为字符串、数字、列表 ls = ['name','age',1,['python','c++']] #获得列表元素的个数 print( len(ls) ) #获得列表指定索引的元素,可用负号从后往前依次类推 切片提取元素 print( ls[0:3] ) print( ls[-3:-1] ) #获得指定元素的索引,将一个元素作为方法的入口参数 print( ls.index('name') ) #获得子元素或子字符串在列表或字符串中出现的次数,第二、三个入口参数为搜索范围 print( ls.count('name') ) #将一个列表添加到此列表的结尾 ls = [1,2,3] ls.append([1,2,3])#append方法改变了ls结构 print( ls ) #将一个列表的元素扩充到此列表 ls.extend([1,2,3]) print( ls ) #在指定索引位置插入元素或列表 ls.insert(1, 'hobby') print( ls ) #逆向排序列表中的元素 ls.reverse() print( ls ) #复制列表 ls2 = ls.copy() print( ls2 ) ls2=ls[:] print( ls2 ) #直接删除指定元素 ls.remove('hobby') print( ls ) #删除列表索引对应元素 ls.pop(1) print( ls ) #删除列表中的所有元素 ls.clear() print( ls ) #列表是可变对象,可对内部内容变化操作,对数字元素的排序 ls = [3,2,1] ls.sort() print( ls ) #提取列表元素,切片操作 print( ls[:3] ) print( ls[1:3] ) print( ls[-2:-1] ) #将多维列表元素展开到一维列表中 ls=[[1,2],["yu","yu"]] ls = [j for i in ls for j in i] print( ls ) #首先将列表结构数组化,然后将数据展开到一个数组中 ls = [[1,2],[3,4]] arr = np.array(ls) arr.flatten() print( arr ) #首先将列表结构矩阵化 Mat=np.mat(ls) #再将此矩阵展开转化为数组 print( Mat.flatten().A ) print(np.shape(Mat.flatten().A)) #获得此矩阵展开后的第一维数组 print( Mat.flatten().A[0] ) '''将列表当作栈(stack)使用,后进先出,使用append()方法将元素添加到栈顶, 使用不指定索引的pop()方法将元素从栈顶释放出来''' stack = [1,2,3] stack.pop() print( stack ) '''将列表当作队列(queue)使用,先进先出''' from collections import deque queue = deque(['name','age']) queue.append('weight') queue.popleft() print( queue ) '''列表生成式,在列表内写表达式,从最基本的方法到一行代码 range(1,11,2) 左闭右开,第三个元素为切片操作的间隔大小,python2使用xrange()''' print( list(range(1,11,2)) ) ls = [] for i in range(1,11,2): ls.append(i*i) print( ls ) ls = [i*i for i in list(range(1,11))] print(ls) #使用if作为过滤器 print( [i*i for i in range(1,11) if i%2==0] ) print( [m+n for m in "ABC" for n in 'XYZ'] ) print( [i+j for i,j in zip("ABC","XYZ")] ) #使用复杂表达式或嵌套函数,i为小数点之后的位数 round()获得指定小数点位数的商 print( round(355/133,3) ) ls = [str(round(355/113,i)) for i in range(1,6)] print(ls) #将3*2的矩阵列表转换为2*3的列表 ls = [[1,2],[3,4],[5,6]] print( [[row[i] for row in ls] for i in range(len(ls[0]))] ) ls2=[] for i in range(2): ls2.append([row[i] for row in ls]) print( ls2 ) #转化列表元素数据类型 ls = ['1','2','3'] print( [int(i) for i in ls] ) print( [float(i) for i in ls] ) ls = [1,2,3] print( [str(i) for i in ls] ) #两个列表的元素的操作 print( [i*0.2+j*0.8 for i,j in zip( [1,2,3],[4,5,6] )] ) '''使用del语句可以从一个列表中依索引而不是值来删除一个元素,可以删除一个切割''' #删除索引为0的元素 del ls[0] #删除索引为2-3的元素 del ls[0:2] #删除所有元素 del ls[:] print(ls) #删除实体变量 del ls #print( ls ) #字符串是不可变对象,只能使用替换方法 Str = 'yuyu' print( Str.replace('l','L') ) ''' 元组由若干逗号分隔的值组成 ''' tp = tuple('name') tp = ('name','age',('weight')) for t in tp: print(t) #将元组转化为列表 print( list(tp) ) ''' 序列是以连续的整数为索引,但是字典则以关键字为索引,关键字是任意不可变类型,通常为字符串或数值 同一个字典内,关键字必须互不相同 ''' dic={'name':'liyu','age':23} print( dict(name='liyu',age=23) ) #dict()方法对元组列表构建字典 print( dict([('name','liyu'),('age',23)]) ) #利用推导式创建字典 print( {key:key**2 for key in (1,2)} ) #获得键对应的值 print( dic.get('name') ) print( dic['name'] ) #判断键 if 'name' in dic: print( dic['name'] ) else: print( 'not found' ) #插入新的键值对 dic['weight']=68 #删除键值 dic.pop('weight') #del dic['weight'] #将键\值以列表的形式获得 print( list(dic.keys()) ) print( list(dic.values()) ) #迭代输出键 迭代输出值 迭代输出键和值 for key in dic.keys(): print(key) for value in dic.values(): print(value) for k,v in dic.items(): print(k,v) ''' 集合是一个元素无序且不重复的集合,基本功能用于消除重复元素或者集合之间的关系测试 ''' se = {'li','yu','li'} print(se) se2 = set('liyuLiYu') se3 = set('liyuName') print(se2) print(se3) #2中的字母,但不在3中 print( se2-se3 ) #在2或3中的字母 print( se2|se3 ) #在2和3中的字母 print( se2&se3 ) #在2或3中的字母,但不能同时在2和3中 异或 print( se2^se3 ) #集合的推导式 print( {x for x in 'liyuname' if x not in 'ly'} ) #将其他数据结构,如列表转化为集合 se=set([1,1,2,3]) se.add(4) se.remove(4) print( se )
参考资料:
1. 廖雪峰《Python2.7教程》