cookbook_数据结构和算法
list_a = [1,2,3,4,5,6,7,8,9]
a,b,c,d,e,f,g,h,i = list_a
print(a,b,c,d,e,f,g,h,i)
#使用相等数量的参数来接收 _,b,c,d,e,f,g,h,_ = list_a
print(b,c,d,e,f,g,h)
#不要的数据使用一个没有用的变量接收
使用 * XXX实现
list_a = range(20)
first,*middle,last = list_a
print(first,middle,last)
#使用*来接收任意数量,甚至没有,返回一个list #当一个元祖内有一个标志位时,一个较好的应用
records = [
("foo",1,2),
("bar","hello"),
("foo",3,4)
] def do_foo(x,y):
print("foo",x,y) def do_bar(s):
print("bar",s) for tags,*args in records:
if tags == "foo":
do_foo(*args)
elif tags == "bar":
do_bar(*args)
collections.deque()
import collections #使用collections.deque(maxlen=5)来定义一个固定长度的list,有新数据写入时如果已经达到maxlen,会自动删除最早插入的数据
def search(lines,pattern,history = 5):
previous_lines = collections.deque(maxlen=history)
for line in lines:
if pattern in line:
yield line,previous_lines
previous_lines.append(line) if __name__ =="__main__":
with open("test.txt","r",encoding="utf8") as f:
for line,previous in search(f,"python",5):
for pline in previous:
print(pline,end="")
print(line,end="")
print("-"*20) #collections.deque使用简介
#一个更加强大的list queue = collections.deque(["jiao","li",'hao',"yu"])
queue.appendleft("wu")
print(queue)
queue.append("haha")
print(queue)
queue.popleft()
print(queue)
print(queue[4])
heapq.nlargest(),heapq.nsmallest()
import heapq nums = [5,56,7,6,34,2,5,7,6,89,80,-90,0,9,-67,5,45,] print(min(nums))
print(max(nums)) print(heapq.nlargest(3,nums))
print(heapq.nsmallest(3,nums)) #可支持更加复杂的数据结构 portfolio = [
{"name":"jiao","age":24},
{"name":"jsdfo","age":2},
{"name":"jisd","age":12},
{"name":"jdo","age":36},
{"name":"li","age":25},
{"name":"jgd","age":50},
] print(heapq.nlargest(3,portfolio,key=lambda s:s['age']))
print(max(portfolio,key=lambda s:s['age']))
heapq.heappush(),heapq.heappop()
import heapq #列表中实际存一个元组,(-priority,self._index,item)
class PriorityQueue:
def __init__(self):
self._queue = []
self._index = 0 def push(self,item,priority):
heapq.heappush(self._queue,(-priority,self._index,item))
self._index += 1 def pop(self):
return heapq.heappop(self._queue)[-1] def get(self):
return self._queue q = PriorityQueue()
q.push("foo",2)
q.push("sdf",3)
q.push("sfasc",5)
q.push("fdsg",4)
print(q.pop())
print(q.get())
collections.defaultdict(list),collections.defaultdict(set)
import collections d = collections.defaultdict(list)#自动初始化,不用判断是否存在
d["a"].append(1)
d["a"].append(1)
d["a"].append(1)
d["a"].append(1)
print(d['a'])
collections.OrderedDict()
import collections d = collections.OrderedDict()#普通字典的两倍,大数据不应该使用
d['foo'] = 1
d["bar"] = 2
d["spam"] = 3
d["gork"] = 4
for i in d:
print(i)
zip(),min(),sorted().max()
#字典进行大小运算时都是使用key值进行大小比较,而我们一般想要用value值比较,而且还想要得到该值的key
prices = {
"ACME":23,
"AAPL":345,
"IBM":34,
"FB":24
}
#利用zip,zip返回一个迭代器,只能使用一次
min_price = min(zip(prices.values(),prices.keys()))
print(min_price)
#排序
price_sorted = sorted(zip(prices.values(),prices.keys()))
print(price_sorted)
a = {
"x":2,
"y":5,
"z":7
}
b = {
"x":2,
"y":8,
"w":4
}
print(a.keys() & b.keys())#寻找相同的key
print(a.keys() - b.keys())#寻找a中有b中没有的key
print(a.items() & b.items())#寻找相同项
def dedupe(items,key = None):
seen = set()
for item in items:
val = item if key is None else key(item)
if val not in seen:
yield item
seen.add(val)
cookbook_数据结构和算法的更多相关文章
- 开启基本数据结构和算法之路--初识Graphviz
在我的Linux刀耕开荒阶段,就想开始重拾C,利用C实现常用的基本数据结构和算法,而数据结构和算法的掌握的熟练程度正是程序的初学者与职业程序员的分水岭. 那么怎么开启这一段历程呢? 按照软件工程的思想 ...
- 【转】MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- [转]MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- MySQL索引背后的数据结构及算法原理【转】
本文来自:张洋的MySQL索引背后的数据结构及算法原理 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持 ...
- 数据结构与算法JavaScript (一) 栈
序 数据结构与算法JavaScript这本书算是讲解得比较浅显的,优点就是用javascript语言把常用的数据结构给描述了下,书中很多例子来源于常见的一些面试题目,算是与时俱进,业余看了下就顺便记录 ...
- 数据结构与算法 Big O 备忘录与现实
不论今天的计算机技术变化,新技术的出现,所有都是来自数据结构与算法基础.我们需要温故而知新. 算法.架构.策略.机器学习之间的关系.在过往和技术人员交流时,很多人对算法和架构之间的关系感 ...
- 《java数据结构和算法》读书笔记
大学时并不是读计算机专业的, 之前并没有看过数据结构和算法,这是我第一次看. 从数据结构方面来说: 数组:最简单,遍历.查找很快:但是大小固定,不利于扩展 ...
- MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- javascript数据结构与算法--高级排序算法
javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...
随机推荐
- 常用Linux网络命令
TCP状态统计: netstat -anp TCP各个状态的连接数:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a] ...
- openstack namespace 的应用
查看虚拟机网络连通性 1.neutron port-list | grep IP 2.neutron port-show ID 查看subnet 3.neutron subnet-show ID 查看 ...
- RocketMQ 可视化环境搭建和基础代码使用
RocketMQ 是一款分布式消息中间件,最初是由阿里巴巴消息中间件团队研发并大规模应用于生产系统,满足线上海量消息堆积的需求, 在 2016 年底捐赠给 Apache 开源基金会成为孵化项目,经过不 ...
- 跟我学SpringCloud | 第四篇:熔断器Hystrix
跟我学SpringCloud | 第四篇:熔断器Hystrix 1. 熔断器 服务雪崩 在正常的微服务架构体系下,一个业务很少有只需要调用一个服务就可以返回数据的情况,这种比较常见的是出现在demo中 ...
- redis 安装和单机多节点集群
环境: centOs系统 一.安装redis: 1.下载安装(先装c编译器yum -y install gcc) $ wget http://download.redis.io/releases/re ...
- C++ 洛谷 2014 选课 from_树形DP
洛谷 2014 选课 没学树形DP的,看一下. 首先要学会多叉树转二叉树. 树有很多种,二叉树是一种人人喜欢的数据结构,简单而且规则.但一般来说,树形动规的题目很少出现二叉树,因此将多叉树转成二叉树就 ...
- 淺談Coach思考模式
我現在是個窮屌,沒錯.我清楚的知道這一點,但是我也知道,我能改變. 之前幹了7年的評估行業,中間換了3家公司,第一家公司待的時間最長,待了5年.2018年開始,我就在思考轉行.之前在第一家企業接觸過一 ...
- web应用分页
1. 场景描述 目前大部分的应用程序中都会用到分页功能,以便减少前端浏览器及后台服务器的压力,以及其他方面的考虑. (1)分页从概念上可分为逻辑分页和物理分页,逻辑分页主要是通过应用程序(前端或者后端 ...
- redis快速部署
1. 场景描述 以前是直接使用公司提供的redis集群,只使用不负责维护,因项目用到负载均衡,需要使用redis做session共享,存储session信息,所以就部署了下,记录下以便后续能快速部署. ...
- 浅入深出Vue:代码整洁之封装
深入浅出vue系列文章已经更新过半了,在入门篇中我们实践了一个小小的项目. <代码整洁之道>一书中提到过一句话: 神在细节中 这句话来自20世纪中期注明现代建筑大师 路德维希·密斯·范·德 ...