python进阶(数据结构和算法[1])


将序列分解为单独的变量

>>> p = (4,5) # 通过赋值分解元组或序列
>>> x,y = p
>>> x
4
>>> y
5
>>> data = [‘ACME‘, 50, 91.9, (2000,1,1)]
>>> name, shares, prices, date = data
>>> name
‘ACME‘
>>> date
(2000, 1, 1)
>>> name, shares, prices, (year, month, day) = data
>>> prices
91.9
>>> month
1
>>> day
1
>>> string = "hello" #只要对象是可迭代的,就可以进行分解操作
>>> a, b, c, d, e = string
>>> a
‘h‘
>>> b
‘e‘
>>> e
‘o‘
>>> name, _, prices, _ = data #_表示不感兴趣的项
>>> name
‘ACME‘
>>> prices
91.9
>>> _
(2000, 1, 1)
>>> name, _, prices, _ , outbound= data # 解包元素不匹配
Traceback (most recent call last):
  File "<pyshell#38>", line 1, in <module>
    name, _, prices, _ , outbound= data
ValueError: need more than 4 values to unpack

从任意长度的可迭代对象中分解元素

>>> *trailing, current = [12, 23, 34, 45, 56, 67, 78, 89]
>>> current
89
>>> trailing # 使用“*表达式”进行分解匹配
[12, 23, 34, 45, 56, 67, 78]
>>> a, b, *, d = [12, 34, 45, 56, 67,89]
SyntaxError: invalid syntax
>>> a, b, *c, d = [12, 34, 45, 56, 67,89]
>>> a
12
>>> b
34
>>> c
[45, 56, 67]
>>> d
89

>>> line = ‘nobody:*:-2:user:/home‘
>>> uname, *others, path = line.split(‘:‘)
>>> uname
‘nobody‘
>>> path
‘/home‘

对于分解位置或者任意长度的可迭代对象,这样再合适不过了。对于固定的组件或者模式(如,元素2以后的都是电话号码,但是电话号码的数量未知),使用星号表达式可以方便快捷的分解。

保存最后N个元素

#使用collections中的deque实现
from collections import deque

d = deque()

d.append(‘1‘)
d.append(‘2‘)
d.append(‘3‘)
len(d) # 3
d[0] # 1
d[-1] # 3
d = deque(‘12345‘)
len(d) # 5
d.popleft() # 1
d.pop() # 5
d # deque([‘2‘, ‘3‘, ‘4‘])

#我们还可以限制deque的长度:
d = deque(maxlen=30)
#当限制长度的deque增加超过限制数的项时, 另一边的项会自动删除:
d = deque(maxlen=2)
d.append(1)
d.append(2) # deque([‘1‘, ‘2‘])
d.append(3) # deque([‘2‘, ‘3‘])

 |  append(...)
 |      Add an element to the right side of the deque.
 |
 |  appendleft(...)
 |      Add an element to the left side of the deque.
 |
 |  clear(...)
 |      Remove all elements from the deque.
 |
 |  count(...)
 |      D.count(value) -> integer -- return number of occurrences of value
 |
 |  extend(...)
 |      Extend the right side of the deque with elements from the iterable
 |
 |  extendleft(...)
 |      Extend the left side of the deque with elements from the iterable
 |
 |  pop(...)
 |      Remove and return the rightmost element.
 |
 |  popleft(...)
 |      Remove and return the leftmost element.
 |
 |  remove(...)
 |      D.remove(value) -- remove first occurrence of value.
 |
 |  reverse(...)
 |      D.reverse() -- reverse *IN PLACE*
 |
 |  rotate(...)
 |      Rotate the deque n steps to the right (default n=1).  If n is negative,
 |      rotates left.
时间: 2024-12-13 14:58:36

python进阶(数据结构和算法[1])的相关文章

[0x01 用Python讲解数据结构与算法] 关于数据结构和算法还有编程

忍耐和坚持虽是痛苦的事情,但却能渐渐地为你带来好处. ——奥维德 一.学习目标 · 回顾在计算机科学.编程和问题解决过程中的基本知识: · 理解“抽象”在问题解决过程中的重要作用: · 理解并实现抽象数据结构: · 复习Python编程语言 二.写在前面 自第一台电子计算机使用线路和开关传达人类的指令以来,我们编程的思考方式有了很大的改变,在很多方面,计算机技术的发展为计算机科学家提供了众多的工具和平台去实现他们的想法.高性能理器,高速网络和大内存使得计算机研究者必须掌握在这样复杂的螺旋式通道中

Python实现数据结构和算法之桶排序

桶排序 桶排序从 1956 年就开始被使用,该算法的基本思想是由E.J.Issac 和 R.C.Singleton 提出来的. 这个算法就好比有 11 个桶,编号从 0~10.每出现一个数,就在对应编号的桶中放一个小旗子,最后只要数数每个桶中有几个小旗子就 OK 了.例如 2 号桶中有 1 个小旗子,表示2 出现了一次;3 号桶中有 1 个小旗子,表示 3 出现了一次;5 号桶中有 2 个小旗子,表示 5出现了两次;8 号桶中有 1 个小旗子,表示 8 出现了一次. 代码 1 def main(

Python实现数据结构和算法之冒泡排序

冒泡排序 冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来. 如果有 n 个数进行排序,只需将 n?1 个数归位,也就是说要进行n-1 趟操作.而“每一趟”都需要从第 1 位开始进行相邻两个数的比较,将较小的一个数放在后面,比较完毕后向后挪一位继续比较下面两个相邻数的大小,重复此步骤,直到最后一个尚未归位的数,已经归位的数则无需再进行比较. 代码 1 def _bubbleSort(): 2 a = [] 3 n = int(input('您需要输入几个数进行排序

用python语言讲解数据结构与算法总述(一)

关于数据结构与算法讲解的书籍很多,但是用python语言去实现的不是很多,最近有幸看到一本这样的书籍,由Brad Miller and David Ranum编写的<Problem Solving with Algorithms and Data Structures Using Python>,地址为:http://interactivepython.org/runestone/static/pythonds/index.html是英文的,写的不错,里面代码的实现也很详细,很多有趣的例子,于

python 下的数据结构与算法---1:让一切从无关开始

我也忘了大概多久了,好像是三周多一点,终于把Data Structure and Algorithms with python以及 Problem Solving with  Algorithms and DataStructures看完了(图那部分没仔细看,太难太费时间,毕业设计开始了,有点忙).[github地址,包含了那两本书带笔记版以及下面零的代码] 所以啦,这作为第一篇总结笔记就从点无关的开始吧(也就是这两本书中提到的python相关但是与数据结构和算法无关的东东) 目录: 零:有些什

python数据结构与算法 38 分析树

分析树 树的结构完成以后,该是时候看看它能做点什么实事儿了.这一节里,我们研究一下分析树.分析树能够用于真实世界的结构表示,象语法或数学表达式一类的. 图1 一个简单语句的分析树 图1所示是一个简单语句的层级结构,把语句表示为树结构可以让我们用子树来分析句子的组成部分. 图2 ((7+3)?(5?2))的分析树 我们也可以把数学表达式如((7+3)?(5?2))表示为分析树,如图2.此前我们研究过完全括号表达式,这个表达式表达了什么呢?我们知道乘法的优先级比加减要高,但因为括号的关系,在做乘法之

python数据结构与算法 36 树的基本概念

树 学习目标 理解什么是树及使用方法 学会使用树实现映射 用列表实现树 用类和引用实现树 用递归实现树 用堆实现优先队列 树的例子 前面我们学习过栈和队列这类线性数据结构,并且体验过递归,现在我们学习另一种通用数据结构,叫做树.树在计算机科学中应用广泛,象操作系统.图形学.数据库系统.网络等都要用到树.树和他们在自然界中的表哥--植物树--非常相似,树也有根,有分枝,有叶子.不同之处是,数据结构的树,根在顶上,而叶子在底部. 在开始学习之前,我们来研究几个普通的例子.第一个是生物学上的分级树.图

python数据结构与算法 37 树的实现

树的实现 记住上一节树的定义,在定义的基础上,我们用以下的函数创建并操作二叉树: BinaryTree() 创建一个二叉树实例 getLeftChild() 返回节点的左孩子 getRightChild() 返回节点的右孩子 setRootVal(val) 把val变量值赋给当前节点 getRootVal() 返回当前节点对象. insertLeft(val) 创建一个新二叉树作为当前节点的左孩子 insertRight(val) 创建一个新二叉树作为当前节点的右孩子. 实现树的关键点是合适的存

python数据结构与算法 34 归并排序

归并排序 在提高排序算法性能的方法中,有一类叫做分而治之.我们先研究其中第一种叫做归并排序.归并排序使用递归的方法,不停地把列表一分为二.如果列表是空或只有一个元素,那么就是排好序的(递归基点),如果列表有超过1个的元素,那么切分列表并对两个子列表递归使用归并排序.一旦这两个列表排序完成,称为"归并"的基本操作开始执行.归并是把两个有序列表合并成一个新的有序列表的过程.图10是我们熟悉的列表样例分解过程,图11是归并的过程. 图10  切分过程 图11  归并过程 以下是mergeSo

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

Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还是牺牲了不常用的操作的性能来成全常用功能. 本文地址:http://www.cnblogs.com/archimedes/p/python-datastruct-algorithm-list-dictionary.html,转载请注明源地址. 设计者有很多的选择,使他们实现list的数据结构.这些选