Python3简单教程(六)数据结构

相关文件及后续更新会上传至:https://github.com/bloodymandoo/Python3_lesson

#Python数据结构

#列表

#Python中列表是可变的,这是它区别于字符串和元组的重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。 #以下是Python中列表的方法: # list.append(x) 把一个元素添加到列表的结尾,相当于a[len(a):]=[x] # list.extend(L) 通过添加指定列表的所有元素来扩充列表,相当于a[len(a):]=L # list.insert(i,x) 在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如a.insert(0,x)会插入到整个列表之前,而a.insert(len(a),x)相当于a.append(x) # list.remove(x) 删除列表中值为x的第一个元素。如果没有这样的元素,就会返回一个错误 # list.pop([i]) 从列表的指定位置删除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。 # 元素随即从列表中被删除。(方法中i两边的方括号表示这个参数是可选的) # list.clear() 移出列表中的所有项,等于del a[:] # list.index(x) 返回列表中第一个值为x的元素的索引。如果没有匹配的元素就会返回一个错误 # list.count(x) 返回x在列表中出现的次数 # list.sort() 对列表中的元素进行排序 # list.reverse() 倒排列表中的元素 # list.copy() 返回列表的浅赋值,等于a[:] a = [66.25,333,333,1,1234.5] print(a.count(333),a.count(66.25),a.count('x')) #return 2 1 0 a.insert(2,-1) a.append(333) print(a) #return [66.25, 333, -1, 333, 1, 1234.5, 333] print(a.index(333)) #return 1 a.remove(333) print(a) #return [66.25, -1, 333, 1, 1234.5, 333] a.reverse() print(a) #return [333, 1234.5, 1, 333, -1, 66.25] a.sort() print(a) #return [-1, 1, 66.25, 333, 333, 1234.5]

# 将列表当做堆栈使用

# 列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个释放 # (后进先出)。用append()方法可以把一个元素添加到堆栈顶。用不指定索引的pop()方法可以把一个元素从堆栈顶 # 释放出来。 from collections import deque queue = deque(['Eric','John','Michael']) queue.append('Terry') queue.append('Graham') print(queue) #return deque(['Eric', 'John', 'Michael', 'Terry', 'Graham']) queue.popleft() queue.popleft() print(queue) #return deque(['Michael', 'Terry', 'Graham'])

#列表推到式

#列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的 # 结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。 # 每个列表推导式都在for之后跟一个表达式,然后有零到多个for或if子句。返回结果是一个根据表达 # 从其后的for和if上下文环境中生成出来的列表。如果希望表达式推到出一个元组,就必须使用括号。 vec = [2,4,6] print([3*x for x in vec]) #return [6, 12, 18] print([[x,x**2] for x in vec]) #return [[2, 4], [4, 16], [6, 36]] freshfruit = [' banana',' loganberry ','passion fruit '] print([weapon.strip() for weapon in freshfruit]) #return ['banana', 'loganberry', 'passion fruit'] print([3*x for x in vec if x>3]) #return [12, 18] print([3*x for x in vec if x<2]) #return [] vec1 = [2,4,6] vec2 = [4,3,-9] print([x*y for x in vec1 for y in vec2]) #return [8, 6, -18, 16, 12, -36, 24, 18, -54] print([x+y for x in vec1 for y in vec2]) #return [6, 5, -7, 8, 7, -5, 10, 9, -3] print([vec1[i]*vec2[i] for i in range(len(vec1))]) #return [8, 12, -54] print([str(round(355/113,i)) for i in range(1,6)]) #return ['3.1', '3.14', '3.142', '3.1416', '3.14159']

#嵌套列表解析

#Python的列表还可以嵌套 #以下实例展示了3X4的矩阵列表: matrix = [ [1,2,3,4], [5,6,7,8], [9,10,11,12] ] #以下实例将3X4的矩阵列表转换为4X3列表: print([[row[i] for row in matrix] for i in range(4)]) #return [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] transposed = [] for i in range(4): transposed.append([row[i] for row in matrix]) print(transposed) #return [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

#del语句

# 使用del语句可以从一个列表中依索引而不是值来删除一个元素。这与使用pop()返回一个值不同。可以用del # 语句从列表中删除一个切割,或清空整个列表(我们以前介绍的方法是给该切割赋一个空列表)。 a = [0,1,2,3,4,5] del a[0] print(a) #return [1, 2, 3, 4, 5] del a[2:4] print(a) #return [1, 2, 5] del a[:] print(a) #return []

#元组和序列

#元组由若干逗号分隔的值组成,例如: t = 12345,54321,'hello' print(t[0]) #return 12345 print(t) #return (12345, 54321, 'hello') u = t , (1,2,3,4,5) print(u) #return ((12345, 54321, 'hello'), (1, 2, 3, 4, 5))

#集合

# 集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。 # 可以用大括号({})创建集合。注意:如果要创建一个集合,你必须用set()而不是{};后者创建一个空的 # 字典。 basket = {'apple','orange','apple','pear','orange','banana'} print(basket) #return {'banana', 'apple', 'orange', 'pear'} print('orange' in basket) #return True a = {x for x in 'asdasfjads' if x not in 'sad'} print(a) #return {'j', 'f'}

#字典

#另一个非常有用的Python内建数据类型是字典。 #序列事宜连续的整数位索引,与此不同的是,字典以关键字位索引,关键字可以是任意类型,通常用字符串或数值 #理解字典的最佳方法是把它看做无序的键=>值对集合。在同一个字典之内,关键字必须是互不相同 tel = {'jack':4098,'sape':4139} tel['guido'] = 4127 print(tel) #return {'jack': 4098, 'sape': 4139, 'guido': 4127} print(list(tel.keys())) #return ['jack', 'sape', 'guido'] print(sorted(tel.keys())) #return ['guido', 'jack', 'sape']

#遍历技巧

#在字典中遍历时,关键字和对应的值可以使用items()方法同时解读出来: knights = {'gallahad':'the pure','robin':'the brave'} for k,v in knights.items(): print(k,v) #return # gallahad the pure # robin the brave #在序列中遍历时,索引位置和对应值可以使用enumerate()函数同时得到: for i,v in enumerate(['tic','tac','toe']): print(i,v) #return # 0 tic # 1 tac # 2 toe #同时遍历两个或更多的序列,可以使用zip()组合: questions = ['name','quest','favorite color'] answers = ['lancelot','the holy grail','blue'] for q,a in zip(questions,answers): print('What is your {0}? It is {1}.'.format(q,a)) #return # What is your name? It is lancelot. # What is your quest? It is the holy grail. # What is your favorite color? It is blue.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值