关于python3 数据结构的补充
列表
当做堆栈使用
stack = [2,3,4]
stack.append( 5 ) # [2,3,4,5]
stack.pop() # 5
print(stack) # [2,3,4]
当做队列使用
可以把列表当做队列使用,第一个加入的元素,第一个取出,效率不高。在队列的最后添加或弹出元素速度快,然而在列表里插入或从头部弹出速度不快,因为每一个元素都要移动
form collections import deque
queue = deque([1,2,3])
queue.append(4)
queue.popleft() # 1
print(queue) # [2,3,4]
列表推导式
列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为新列表的元素,或者根据确定的判定条件创建子序列
每个列表推导式都在 for 之后跟一个表达式,然后跟零个或多个 for或if 子句。返回结果是一个根据表达式从其后的 for和if 上下文环境生成出来的列表,如果希望推导出一个元组,则需要使用小括号
vec = [2,4,6]
[3*x for x in vec] # [6,12,18]
[[x,x**2] for x in vec] # [[2,4],[4,16],[6,36]]
可以对每个元素都逐个调用某方法
freshfruit = [' banana', ' loganberry ', 'passion fruit ']
[weapon.strip() for weapon in freshfruit]
# ['banana', 'loganberry', 'passion fruit']
也可以用 if子句 做过滤器
[3*x for x in vec if x >3]
# [12,18]
关于循环
vec1 = [1,2,3]
vec2 = [2,4,6]
[x*y for x in vec1 for y in vec2]
# [2,4,6,4,8,12,6,12,18]
[vec1[i]*vec2[i] for i in range(len(vec1))]
# [2,8,18]
嵌套列表解析
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
print([[row[i] for row in matrix] for i in range(4)])
for i in range(4):
for row in matrix:
print(row[i],end=" ")
transposed = []
for i in range(4):
transposed.append([row[i] for row in matrix])
del语句
使用 del语句
可以从一个列表中依索引删除一个元素,可以从列表中删除一段元素,或清空所有元素
a = [0,1,2,3,4,5,6]
del a[0] # 删除一个
del a[2:4] # 删除一段
del a[:] # 清空
集合
集合支持推导式
字典
字典推导可以用来创建任意键和值的表达式词典
{x: x**2 for x in (2,4,6)}
构造函数可以直接从键值对元数组列表中构建字典。
dict([(['sape',4139),('guido',4127)])
# {'sape':4139,'guido':4127}
如果关键字只是简单的字符串,也可以采用关键字指定键值对的方式
dict(sape = 41,guido = 40)
# {'sape':41,'guido':40}
遍历技巧
遍历字典时,关键字和对应的值可以使用
items()
方法同时解读
knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():
print(k,v)
遍历序列是,索引值和对应的值可以通过
enumerate()
函数同时获得
for i, v in enumerate([0,1,2]):
print(i,v)
同时遍历两个或更多个序列,使用
zip()
组合
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
print(f'What is your {q}? It is {a}.')
反向遍历一个序列,要调用
reversed()
函数
for i in reversed( ['name', 'quest', 'favorite color']):
print(i)
在遍历一个序列前,对序列排序,使用
sorted()
方法
basket = ['apple', 'orange', 'pear', 'banana']
for f in sorted(basket):
print(f)