layout: post title: Python3 数据结构 subtitle: 不要怕麻烦,一点点的咬破它 date: 2019-04-26 author: WEW header-img: img/home-bg-art.jpg catalog: true tags: - Python3 - 语言 - 编程 —
列表
列表是可变的主要有以下系列函数
函数 | 作用 |
---|---|
list.append(x) | 把一个元素添加入list末尾,相当于a[len(a):]=x |
list.extend(L) | 把列表L添加在list末尾,相当于a[len(a):]=L |
list.insert(i,x) | 在指定位置i处插入元素x |
list.remove(x) | 列表中删除元素为x的元素,每次只能删除一个元素 |
list.pop([i]) | 从列表指定位置i处删除元素,并将其返回,如果没有指定位置,默认为删除最后一个元素 |
list.clear() | 移除列表中的所有元素,相当于del a[:] |
list.count(x) | 返回x在列表中出现的次数 |
list.sort() | 对列表中的元素进行排序 |
list.reverse() | 倒排列表中的元素 |
list.index(x) | 返回值为x的第一个索引 |
a=[66.25, 333,333,1,134.5]
print(a.count(333),a.count(66.25),a.count(0))
a.insert(2,-1)
print(a)
a.append(333)
print(a)
a.index(333)
a.remove(333)
print(a)
a.reverse()
print(a)
a.sort()
print(a)
输出:
2 1 0
[66.25, 333, -1, 333, 1, 134.5]
[66.25, 333, -1, 333, 1, 134.5, 333]
[66.25, -1, 333, 1, 134.5, 333]
[333, 134.5, 1, 333, -1, 66.25]
[-1, 1, 66.25, 134.5, 333, 333]
将列表当做堆栈
列表的append()和pop()函数可以将列表当成一个堆栈来使用
将列表当成队列具体做法如下
from collections import deque
queue=deque(["Eric","John","Bob"])
queue.append("Terry")
queue.append("Tom")
one1=queue.popleft()
one2=queue.popleft()
print(one1,one2)
print(queue)
输出
Eric John
deque(['Bob', 'Terry', 'Tom'])
列表推导式
列表推导式提供了简单的从序列创建列表的形式,通常应用程序需要将一些操作应用于列表的元素上,并将其结果作为新的列表元素,这就用到了列表推导式,每个列表推导式都在for之前跟一个表达式,然后有0或多个for或if子句,返回结果是根据表达式从其后的for和if上下文生成出的列表,如果希望表达式推导出的是一个元组或者列表需要用到[],或()
vec=[1,2,4]
vec2=[1,-3,6,7]
l=[3*x for x in vec]
ll=[3*x for x in vec if x>3]
r=[(x,x**2) for x in vec]
rr=[x+y for x in vec for y in vec2]
print(l)
print(r)
print(ll)
print(rr)
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
la=[[row[i] for row in matrix]for i in range(4)]
print(la)
输出:
[3, 6, 12]
[(1, 1), (2, 4), (4, 16)]
[12]
[2, -2, 7, 8, 3, -1, 8, 9, 5, 1, 10, 11]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
集合
集合是一个无序且不重复的集,基本功能是消除重复元素和关系测试,类似于C++容器中的set容器,定义是用{},或set(),如果想要创建空的集合必须用set(),{}创建的是空字典,这里不再重复介绍,前面已经介绍过
遍历技巧
字典遍历是可以用items同时解读key 和value
knights={'gall':'the pure','robin':'the brave'}
for k, v in knights.items():
print(k,v)
输出:
gall the pure
robin the brave
遍历序列时,索引位置和元素也可以通过enumerate()进行解读
for i , v in enumerate(['tic','tac','toe']):
print(i , v)
输出;
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(q,a)
输出:
name lancelot
quest the holy grail
favorite color blue