1.序列中的N个元素赋值给变量

data = [1,2,3,"string!",["python","php"]]
num_1,num_2, num_3,num_4,str_1,[list_1,list_2] = data#简单的赋值语句解压并赋值给多个变量,唯一的前提就是变量的数量必须跟序列元素的数量是一样的
print(list_1)
#如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError,Python 的星号表达式可以用来,能从这个可迭代对象中解压出 N 个元素出来
num_x,*midsomething =data
print(midsomething)
print(midsomething[-1][0]) 运行结果:

 python
 [2, 3, 4, 'string!', ['python', 'php']]
  python



#扩展的迭代解压语法是专门为解压不确定个数或任意个数元素的可迭代对象而设计 的。通常,这些可迭代对象的元素结构有确定的规则
line = 'nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false'
uname,*fields,homedir,sh=line.split(":") #星号语法分割字符串
print(uname,homedir,sh)

运行结果:
nobody /var/empty /usr/bin/false

2.保留最后有限的历史记录

from collections import deque
def search(lines, pattern, history=5):
previous_lines = deque(maxlen=history)#使用 deque(maxlen=N) 构造函数会新建一个固定大小的队列。当新的元素加入并
且这个队列已满的时候,最老的元素会自动被移除掉
for li in lines:
if pattern in li:
previous_lines.append(li)
return previous_lines with open('C:\\Users\\master\\Desktop\\text.txt')as f:
print(list(search(f, 'line', 3))) 运行结果:
['fourteenthline\n', 'fifteenthline\n', 'sixteenthline\n']

3.从一个集合中获得最大或者最小的 N 个元素列表

heapq 模块有两个函数:nlargest() 和 nsmallest() 可以完美解决这个问题

当要查找的元素个数相对比较小的时候,函数 nlargest() 和 nsmallest() 是很 合适的。如果你仅仅想查找唯一的最小或最大 (N=1) 的元素的话,那么使用 min() 和 max() 函数会更快些。类似的,如果 N 的大小和集合大小接近的时候,通常先排序这 个集合然后再使用切片操作会更快点 ( sorted(items)[:N] 或者是 sorted(items)[- N:] )。需要在正确场合使用函数 nlargest() 和 nsmallest() 才能发挥它们的优势 (如果 N 快接近集合大小了,那么使用排序操作会更好些)。

import heapq
nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2]
print(heapq.nlargest(3, nums)) # Prints [42, 37, 23]
print(heapq.nsmallest(3, nums)) # Prints [-4, 1, 2]

portfolio = [
{'name': 'IBM', 'shares': 100, 'price': 91.1},
{'name': 'AAPL', 'shares': 50, 'price': 543.22},
{'name': 'FB', 'shares': 200, 'price': 21.09},
{'name': 'HPQ', 'shares': 35, 'price': 31.75},
{'name': 'YHOO', 'shares': 45, 'price': 16.35},
{'name': 'ACME', 'shares': 75, 'price': 115.65}
]
cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])
expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])

 4. 设置优先级

class PriorityQueue:
def __init__(self):
self._queue=[]
self._index =0
def push(self,item,priority):
heapq.heappush(self._queue,(-priority,self._index,item))#优先级为负数的目的是使得元素按照优先级从高到低排序。这个跟普通的按优先级从低到高排序的堆排序恰巧相反。index 变量的作用是保证同等优先级元素的正确排序。通过保存一个不断增加的index 下标变量,可以确保元素按照它们插入的顺序排序
self._index+=1 def pop(self):
return heapq.heappop(self._queue)[-1] class Item:
def __init__(self,name):
self.name = name
def __repr__(self):
return "Item({!r})".format(self.name) q=PriorityQueue()
q.push(Item('foo'),1)
q.push(Item('bet'),5)
q.push(Item('bar'),2)
print(q.pop(),q.pop(),q.pop())#第一个 pop() 操作返回优先级最高的元素。另外注意到如果两个有着相同优先级的元素 ( bar 和 bbr ),pop 操作按照它们被插入到队列的顺序返回的。

5.实现一个键对应多个值的字典

from collections import defaultdict
#果你想要一个键映射多个值,那么你就需要将这多个值放到另外的容器中,比如列表或者集合里面。
d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['b'].append(4)
print(dict(d))
d = defaultdict(set)
d['a'].add(1)
d['a'].add(2)
d['b'].add(4)
print(dict(d))

6.在数据字典中执行一些计算操作 (比如求最小值、最大值、排序等等)

prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
print(min(prices,key=lambda x:prices[x]))#min()和max()函数中提供 key 函数参数来获取最小值或最大值对应的键的信息。
price_sorted = sorted(zip(prices.values(),prices.keys()))#以使用 zip() 和 sorted() 函数来排列字典数据
print(price_sorted)
print(max(zip(prices.values(),prices.keys())))

python数据结构与算法(一)的更多相关文章

  1. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  2. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  3. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  4. Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例

    本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...

  5. Python数据结构与算法之图的广度优先与深度优先搜索算法示例

    本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法.分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 ...

  6. python数据结构与算法之问题求解实例

    关于问题求解,书中有一个实际的案例. 上图是一个交叉路口的模型,现在问题是,怎么安排红绿灯才可以保证相应的行驶路线互不交错. 第一步,就是把问题弄清楚. 怎么能让每一条行驶路线不冲突呢? 其实,就是给 ...

  7. python数据结构与算法之问题求解

    懂得计算机的童鞋应该都知道,一条计算机程序由数据结构跟算法两大部分组成.所以,其实不管你使用哪种计算机语言编写程序,最终这两部分才是一个程序设计的核心.所以,一个不懂得数据结构与算法的程序员不是一个好 ...

  8. Python 数据结构和算法

    阅读目录 什么是算法 算法效率衡量 算法分析 常见时间复杂度 Python内置类型性能分析 数据结构 顺序表 链表 栈 队列 双端队列 排序与搜索 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归 ...

  9. Python数据结构与算法(几种排序)

    数据结构与算法(Python) 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是 ...

  10. Python - 数据结构与算法(Data Structure and Algorithms)

    入门 The Algorithms Python https://github.com/TheAlgorithms/Python 从基本原理到代码实现的Python算法入门,简洁地展示问题怎样解决,因 ...

随机推荐

  1. 第五届蓝桥杯JavaA组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜年龄 题目描述 小明带两个妹妹参加元宵灯会.别人问她们多大了,她们调皮地说:"我们俩的年龄之积是年龄之和的6倍" ...

  2. Java实现 基础算法 求100以内的质数

    public class 求质数 { public static void main(String[] args) { for (int i = 2; i < 100; i++) { int t ...

  3. Windows下mysql的基础操作

    1.数据库表操作: - 首先启动mysql服务器,在安装mysql的目录下打开cmd窗口,运行mysql:'mysql.exe -hlocalhost -p3306 -uroot -p123456'; ...

  4. ELK的踩坑之旅

    前言 设计思路如下 有3台机器 2台做elasticsearch的主副节点 1台做kibana和elasticsearch_head 由于机器匮乏我还在这台机器上部署了logstash和nginx服务 ...

  5. Centos7 安装 redis6 的部分问题总结

    首先把redis.tar.gz 解压到你想要的路径 检查一下安装环境: yum -y install gcc yum -y install epel-release 执行 make 和 make in ...

  6. python 直方图

    import matplotlib.pyplot as plt import numpy as np pop = np.random.randint(0,100,100) pop n,bins,pat ...

  7. 容器编排工具之Docker-compose

    前文我们聊了下docker私有仓库harbor的搭建,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13061984.html:在上一篇博客的末尾,我们简单聊了 ...

  8. [LOJ#500]「LibreOJ β Round」ZQC的拼图

    题目   点这里看题目. 分析   首先不难发现答案具有单调性,因此可以二分答案.答案上限为\(V=2m\times \max\{a_i, b_i\}\).   考虑如何去判断当前的答案.设这个答案为 ...

  9. Unit1-窝窝初体验

    全文共3179字,推荐阅读时间10~15分钟. 文章共分四个部分: 作业分析 评测相关 重构策略 初体验感受 作业分析 第一次作业 第一次作业要求我们实现一个简单的幂函数求导工具,没有乘积和复合的情况 ...

  10. Node.js 学习笔记(一)

    node.js说白了就是JavaScript. node.js的性能是php的86倍(大概). 在下载完后可以用命令行打开及运行.   什么是 Web 服务器? Web服务器一般指网站服务器,是指驻留 ...