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. Java实现 蓝桥杯 算法提高 成绩排序

    试题 算法提高 成绩排序 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给出n个学生的成绩,将这些学生按成绩排序, 排序规则,优先考虑数学成绩,高的在前:数学相同,英语高的在前:数 ...

  2. PAT 人口普查

    某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的,假设已知镇上没有超过 200 岁的老人,而今天是 2014 ...

  3. Elasticsearch系列---生产集群部署(下)

    概要 本篇继续讲解Elasticsearch集群部署的细节问题 集群重启问题 如果我们的Elasticsearch集群做了一些离线的维护操作时,如扩容磁盘,升级版本等,需要对集群进行启动,节点数较多时 ...

  4. 彻底解决go get golang.org/x等包失败与VSCode golang插件安装失败问题

    由于某种众所周知的一些原因,https://golang.org/ golang 的官方域名是被墙了的,这也就导致了, 在广大 go 开发者使用 golang 的时候,总会出现 go get 失败的问 ...

  5. rgb格式颜色与#000000格式颜色的转换

    首先,#000000格式的颜色被成为十六进制颜色码: 6位数分为三组,每两位数一组,依次是红.黄.蓝颜色的强度: 而与此对应的,rgb(39,137,202)依次是十进制的红黄蓝颜色: 因此将rgb格 ...

  6. pytorch入门2.0构建回归模型初体验(数据生成)

    pytorch入门2.x构建回归模型系列: pytorch入门2.0构建回归模型初体验(数据生成) pytorch入门2.1构建回归模型初体验(模型构建) pytorch入门2.2构建回归模型初体验( ...

  7. git-bash用法详解

    目录 1. 开启Windows的 sshd 服务 1.1. ssh 高级配置 1.1.1. 生成秘钥 1.1.2. 添加或更改密码 1.1.3. 分发公钥 1.1.4. 允许以root身份ssh连接 ...

  8. Shell编译安装nginx

    环境及规划 [root@nginx-node01 ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) ID 主机名 ip ...

  9. TensorFlow从0到1之TensorFlow超参数及其调整(24)

    正如你目前所看到的,神经网络的性能非常依赖超参数.因此,了解这些参数如何影响网络变得至关重要. 常见的超参数是学习率.正则化器.正则化系数.隐藏层的维数.初始权重值,甚至选择什么样的优化器优化权重和偏 ...

  10. 『图论』LCA 最近公共祖先

    概述篇 LCA (Least Common Ancestors) ,即最近公共祖先,是指这样的一个问题:在一棵有根树中,找出某两个节点 u 和 v 最近的公共祖先. LCA 可分为在线算法与离线算法 ...