python数据结构简记

一、python数据结构:
1)List:可更改的类型,下面是List的一些方法:
  1、list.append(x):把一个元素添加到列表的结尾,a[len(a):] = [x]。
  2、list.extend(L):通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L。
  3、list.insert(i,x):在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如a.insert(0,x)会插入到整个列表之前,而a.insert(len(a), x)相当于a.append(x)。
  4、list.remove(x):删除列表中值为 x 的第一个匹配元素。如果没有这样的元素,就会返回一个错误。
  5、list.pop([i]):从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除。(方法中i两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。)
  6、list.clear():移除列表中的所有项,等于del a[:]。
  7、list.index(x):返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
  8、list.count(x):返回x在列表中出现的次数。
  9、list.sort():对列表中的元素进行排序(默认从小到大排序)。
  10、list.reverse():倒排列表中的元素。
  11、list.copy():返回列表的浅复制,等于a[:]。
备注:
  1、python浅复制和深复制的区别:对于可更改类型(复合型对象),复制有分浅复制和深复制两种类型。
    ①浅复制(list.copy()):意味着新建一个对象B,但是其子元素仍然指向对应原对象A的子对象(也就是说,A中原有的数据改变,B也会跟着改变)。同时,只会对原对象A这一层进行拷贝,而不会递归的对子对象也进行拷贝(类似A新增操作就不会对B起作用)。
    举个例子:  A = [[1,2],[2,3,4]]
          B = A.copy()
          print(B) #输出:[[1,2],[2,3,4]]
          C = [1,3,4]
          A.append(C)
          print(A) #输出:[[1,2],[2,3,4],[1,3,4]]
          print(B) #输出:[[1,2],[2,3,4]]
          A[0][0] = ‘a‘
          print(A) #输出:[[‘a‘,2],[2,3,4],[1,3,4]]
          print(B) #输出:[[‘a‘,2],[2,3,4],[1,3,4]]
  总结:也就是说,对对象A进行浅复制之后得到的B对象,对原本复制的内容,A更改则B跟着改,但是自浅复制完后,A对除原有数据外进行操作,例如增加列表元素,都不会对B造成影响。
    ②深复制:意味着新建一个对象B,但是其子元素不再指向对应原对象A的子对象,类似于克隆出来的完全独立体。(也就是说,A中原有的数据 改变,B不会跟着改变)。自然往A中的其他任何操作,都应该不会对B有任何影响的了。
    重用上面例子的数据举例:
      D = copy.deepcopy(A)
      print(D) #[[1,2],[2,3,4]]
      A[0][0] = ‘a‘
      print(A) #输出:[[‘a‘,2],[2,3,4],[1,3,4]]
      print(B) #输出:[[‘1‘,2],[2,3,4],[1,3,4]]数据不会跟着改变

  2、用append()和不指定索引的pop()方法可以实现列表充当堆栈的进出操作。

  3、列表推导式:每个列表推导式都在for之后跟一个表达式,然后又零到多个for/if语句,返回结果是一个根据表达从其后的for和if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。举个例子说明一下怎么用即可:
    >>> A = [1,2,3]
    >>> [10*i for i in A] #输出:[10,20,30]
    >>> [[i, i**2] for i in A] #输出:[[1, 1],[2, 4],[3,9]]

2)嵌套列表解析

这部分就讲一个矩阵行列倒置:
  eg:
    >>> A = [
        [1, 2, 3, 4],
        [5, 6, 7, 8],
        [9, 10, 11, 12],
      ]
    >>> [[row[i] for row in A] for i in range(4)] #进行行列倒置
    >>> print(A)#输出:[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

3)遍历技巧
  1、字典遍历时,关键字和对应的值可以使用items()方法同时解读出来:
    eg:>>> A = {‘a‘: ‘b‘, ‘c‘: ‘d‘}
      >>> for i, j in A.items():
      >>> print(k, v)

  2、序列遍历时,索引位置和对应值可以使用enumerate()函数同时得到:
    eg:>>> for i, j in enumerate([‘a‘, ‘b‘, ‘c‘]):
      >>> print(i, v)

  3、同时遍历两个或者更多的序列时,可以使用zip()组合:
    eg:>>> A = [‘name‘, ‘phone‘, ‘school‘]
      >>> B = [‘yangrongkuan‘,‘18813299877‘,‘scnu‘]
      >>> for i,j in zip(A, B):
      >>> print(‘What is your {0}? It is {1}.‘.format(i, j))

  4、反向遍历一个序列:
    eg:>>> for i in reverse(range(1,10,2)):
      >>> print(i)

  5、要按顺序遍历一个序列,可以使用sorted()函数返回一个已排序的序列,并不修改原值:
    eg:>>> basket = [‘apple‘, ‘orange‘, ‘apple‘, ‘pear‘, ‘orange‘, ‘banana‘]
      >>> for i in sorted(set(basket)):#不用指定按照什么顺序进行排序的
      >>> print(i)

原文地址:https://www.cnblogs.com/yangrongkuan/p/12076781.html

时间: 2024-10-16 02:21:38

python数据结构简记的相关文章

Python数据结构

1. 元组(tuple) 元组由不同的元素组成,每个元素可以储存不同类型的数据,如字符串.数字甚至元组.元组是写保护的,即元组创建后不能再做任何修改操作. 1.1 元组的创建 Tuple(元组)由一系列元素组成,所有元素被包含在一对圆括号中.创建元组时可以不指定元素个数,但一旦创建后就不能修改长度 元组的创建格式如下:tuple_name = (元素1,元素2,-) 如果创建空元组,只需要一对空的圆括号:tuple_name = () 如果创建的元组只包含一个元素,应在元素后面加上逗号,以区分元

Python数据结构——散列表

散列表的实现常常叫做散列(hashing).散列仅支持INSERT,SEARCH和DELETE操作,都是在常数平均时间执行的.需要元素间任何排序信息的操作将不会得到有效的支持. 散列表是普通数组概念的推广.如果空间允许,可以提供一个数组,为每个可能的关键字保留一个位置,就可以运用直接寻址技术. 当实际存储的关键字比可能的关键字总数较小时,采用散列表就比较直接寻址更为有效.在散列表中,不是直接把关键字用作数组下标,而是根据关键字计算出下标,这种 关键字与下标之间的映射就叫做散列函数. 1.散列函数

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

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

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

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

Python学习日志之Python数据结构初识

Python数据结构初识: 一.Python数据结构概述 1.何为数据结构 在程序中,同样的一个或几个数据组织起来,可以有不同的组织方式,也就是不同的存储方式,不同的组织方式就是不同的结构,我们把这些数据组织在一起的结构就叫做数据结构 例如: 有一串字符串:"abc",我们将它重新组织一下,比如通过list()函数将"abc"变成["a","b","c"],那么这个时候数据发生了重组,重组之后的结构就发生了

[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列

python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构时,这些高级的数据结构可能给我们以迷惑. 比如,使用list实现queue的时候,入队操作append()时间复杂度可以认为是O(1),但是,出队操作pop(0)的时间复杂度就是O(n). 如果是想利用python学学数据结构的话,我觉得还是自己实现一遍基本的数据结构为好. 1.链表 在这里,我想使

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的数据结构.这些选