Python中的数据结构

这里总结一下Python中的内置数据结构(Built-in Data Structure):列表list、元组tuple、字典dict、集合set,涵盖的仅有部分重点,详细地去介绍每个知识点并未涉及。

列表list

list的显著特征

  • 列表中的每个元素都可变的

    意味着可以对每个元素进行修改和删除

  • 列表是有序的,每个元素的位置是确定的,可以用索引去访问每个元素

  • 列表中的元素可以是Python中的任何对象


    可以为任意对象就意味着元素可以是字符串、整数、元组、也可以是list等Python中的对象。

>>> x = [1,2,3]
>>> y = {'name':'Sakura'}
>>> z="Test"
>>> a=[x,y,z]
>>> a
[[1, 2, 3], {'name': 'Sakura'}, 'Test']

觉得Python中的list和C语言中的数组蛮像的,只是list中的元素类型可以为Python中的任意对象,C中的数组只能是同种类型。当访问他们中的元素时,都可采用索引。这里需要注意的是,list不仅可以向数组那样正向索引也可以反向索引。

list中的正反索引

   

list中的增删查改

list中有很多的方法,这里仅介绍对list中元素进行增删查改的方法。

  1. 利用insert()和分片将元素添加到指定位置 , 利用remove()和关键字del对

    元素进行删除

    需要注意分片[a:b]中的位置不包含位置b,利用[a,a]可以将元素添加至a位置

   

   

  1. 利用正反索引对元素进行查找

  2. 对元素修改可以直接赋值替换

  3. 列表中还有其他方法如pop()删除末尾元素,pop(i)删除指定位置i的元素,append()向末尾添加元素

list函数

可以通过list将序列创建为列表

Python中包含6中內建的序列:列表,元组,字符串、Unicode字符串、buffer对象和xrange对象。

>>> list("Hello,world")
['H', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd']

其实list为一种类型并非函数,但此处二者并无多大区别。下面的tuple、dict都如此。

元组tuple

  1. 元组可以理解为一个固定的列表,一旦初始化其中的元素便不可修改(认真理解这句话),只能对元素进行查询
>>> test=(1,2,3)
>>> test
(1, 2, 3)
>>> test[1]=4
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> test[1:1] = 4
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> test[1]
2

  从上可知,tuple不支持对元素的修改(包括删除),tuple一初始化便固定下来了。





  再来看一个例子。

>>> test=('a','b',['A','B'])
>>> print(test)
('a', 'b', ['A', 'B'])
>>> test[2][0]='x'
>>> test[2][1]='y'
>>> test
('a', 'b', ['x', 'y'])

  这里看似元素中的元素改变了,可是仔细分析下,元组中的第三个元素是一个列表。

  代码3.4行改变的是列表中的值,元组所指的这个元素列表并没有改变,需要注意这点!

  这就涉及到Python中的可变对象和不可变对象,像list这样的就是可变对象,tuple便是不可变对象。

  1. 元组是固定的列表,那么元组的意义何在呢?

    因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple

    并且需要注意元组中元素的可变性!!

  2. 空的tuple可以记为(),若只有一个元素的tuple记为(1,)

    因为记为(1)的话,这个实际代表的是数字1,此时()是数学公式中的小括号

  3. 因为元组是固定的列表,所以其内置的大多数的方法和列表是差不多的。

  4. 可以通过tuple将序列转换为元组,用法和list一样

>>> tuple('Hello,world!')
('H', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd', '!')

字典dict

字典这个概念就是基于现实生活中的字典原型,生活中的使用名称-内容对数据进行构建,Python中使用键(key)-值(value)存储,也就是C++中的map。

dict的显著特征

  • 字典中的数据必须以键值对的形式出现

  • 键不可重复,值可重复

    键若重复字典中只会记该键对应的最后一个值

  • 字典中键(key)是不可变的,为不可变对象,不能进行修改;而值(value)是可以修改的,可以是任何对象。

    在dict中是根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。

dict的增删查改

  1. 可以采用“键值对”的方法和update()方法向字典中添加元素

    删除可以使用关键字del以及pop()方法

   

  1. 查询采用如查询列表元素的索引方式,使用键作为索引查找值

    若元素不存在会报错,在进行查找前,可以通过以下两种方法判断key是否存在:

    ① 成员资格运算符--in运算符

    ② get()方法(值不存在时返回NULL,也可指定返回的值)
>>> test={'Mon':1}
>>> 'Fri' in test
False
>>> test.get('Fri')
>>> test.get('Fri',-1)
-1
  1. 对值得修改可以采用直接覆盖原值的方法

  2. dict中的元素是无序的,不可以采用分片。

dict函数

可以使用dict,通过其他映射或者(键,值)对的序列建立字典。

>>> test=[('name','Sakura'),('age',20)]
>>> d = dict(test)
>>> d
{'name': 'Sakura', 'age': 20}

dict也可以使用关键字参数创建字典,也可用映射作为dict参数,dict若不带任何参数,将返回一个空字典

>>> d = dict(name='Sakura',age=20)
>>> d
{'name': 'Sakura', 'age': 20}
>>> a=dict()
>>> a
{}

集合set

集合更接近数学上集合的概念。集合中每个元素都是无序的、不重复的任意对象。

可以通过集合去判断数据的从属关系,也可以通过集合把数据结构中重复的元素减掉。集合可做集合运算,可添加和删除元素。

集合的创建

创建集合时需要用list作为输入集合,可通过add()方法增加元素,remove()方法删除元素

>>> test=set([1,2,3])
>>> test
{1, 2, 3}
>>> test.add(3)
>>> test
{1, 2, 3}
>>> test.add(6)
>>> test
{1, 2, 3, 6}
>>> test.remove(3)
>>> test
{1, 2, 6}

集合中重复的元素会被过滤掉

集合运算

Python中的集合也可以进行集合的之间的交、并等运算

>>> s1 = set([1,2])
>>> s2=set([2,3])
>>> s1 & s2 # s1与s2
{2}
>>> s1 | s2 # s1与s2进行或运算
{1, 2, 3}

Python中的数据结构的更多相关文章

  1. Python 中的数据结构总结(一)

    Python 中的数据结构 “数据结构”这个词大家肯定都不陌生,高级程序语言有两个核心,一个是算法,另一个就是数据结构.不管是c语言系列中的数组.链表.树和图,还是java中的各种map,随便抽出一个 ...

  2. Python中的数据结构 --- 列表(list)

      列表(list)是Python中最基本的.最常用的数据结构(相当于C语言中的数组,与C语言不同的是:列表可以存储任意数据类型的数据). 列表中的每一个元素分配一个索引号,且索引的下标是从0开始. ...

  3. Python中的数据结构和算法

    一.算法 1.算法的时间复杂度 大 O 记法,是描述算法复杂度的符号O(1) 常数复杂度,最快速的算法. 取数组第 1000000 个元素 字典和集合的存取都是 O(1) 数组的存取是 O(1) O( ...

  4. python中的数据结构-链表

    一.什么是链表 链表是由一系列节点构成,每个节点由一个值域和指针域构成,值域中存储着用户数据,指针域中存储这指向下一个节点的指针.根据结构的不同,链表可以分为单向链表.单向循环链表.双向链表.双向循环 ...

  5. Python中的数据结构 --- 集合(set)

    1.集合(set)里面的元素是不可以重复的    s={1,2,3,3,4,3,4}      ## 输出之后,没有重复的 2.定义一个空集合 s = set([]) print s,type(s)3 ...

  6. Python中的数据结构 --- 元组(tuple)、字典(tuple)

       元组(tuple)本身是不可变数据类型,没有增删改查:元组内可以存储任意数据类型一.元组的创建 例:t = (1,2.3,'star',[1,2,3])      ## 元组里面包含可变类型,故 ...

  7. Python中常用模块一

    random模块 import random # 应用数学计算 print(random.random()) # 取随机小数 范围是 0-1之间 # 应用抽奖 , 彩票 print(random.ra ...

  8. 在python中使用json

    在服务器和客户端的数据交互的时候,要找到一种数据格式,服务端好处理,客户端也好处理,这种数据格式应该是一种统一的标准,不管在哪里端处理起来都是统一的,现在这种数据格式非常的多,比如最早的xml,再后来 ...

  9. Python中的Pandas模块

    目录 Pandas Series 序列的创建 序列的读取 DataFrame DataFrame的创建 DataFrame数据的读取 Panel Panel的创建 Pandas Pandas ( Py ...

随机推荐

  1. redis_简单动态字符串

    在redis中,C字符串(以'\0'结尾的字符数组)只用在一些无需对字符串值进行修改的地方,比如打印日志.其他情况,redis使用SDS - SimpleDynamicString 简单动态字符串,来 ...

  2. MVC概述

    学习MVC模式   一.MVC简介 MVC是Model-View-Controller的简称,即模型-视图-控制器.MVC是一种设计模式,它把应用程序分成三个核心模块:模型.视图.控制器,它们各自处理 ...

  3. Python之配置日志的几种方式(logging模块)

    原文:https://blog.csdn.net/WZ18810463869/article/details/81147167 作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Py ...

  4. Hive数据倾斜解决方案

    https://blog.csdn.net/yu0_zhang0/article/details/81776459 https://blog.csdn.net/lxpbs8851/article/de ...

  5. 1.Spring AOP应用

    首先咱们来了解一下具体的业务场景(这是个真实的项目的业务场景):具体的业务是这样的,现在系统中有六十多个主档(功能模块),每个主档都有新增.修改.删除功能,当我们在对每个主档做这些操作时需要对其记录日 ...

  6. MacOS使用Charles抓去HTTPS数据

    1.安装Charles,示例版本为4.0.1 2.Proxy->Proxy Settings 3.MacOS->Terminal->ifconfig 获取本机IP地址,如192.16 ...

  7. 判断exe执行结束,事件监听

    [转载]C#调用Exe文件的方法及如何判断程序调用的exe已结束     原文地址:C#调用Exe文件的方法及如何判断程序调用的exe已结束作者:guoguo 很简单的代码就可以实现C#调用EXE文件 ...

  8. pwnable.kr详细通关秘籍(二)

    i春秋作家:W1ngs 原文来自:pwnable.kr详细通关秘籍(二) 0x00 input 首先看一下代码: 可以看到程序总共有五步,全部都满足了才可以得到flag,那我们就一步一步来看 这道题考 ...

  9. WEB站点服务器安全配置

    WEB站点服务器安全配置   本文转自:i春秋社区   // 概述 // 熟悉网站程序 // 更改默认设置的必要性 // 目录分析与权限设置技巧 // 防止攻击其他要素 // 公司官网不可忽视的安全性 ...

  10. Open系列相关概念汇总

    最近接触了Android OpenGL ES 和 OpenCL ES,然后就很想知道除了这两个之外到底还有几个Open系列的API集.搜集的结果如下(纯为自己科普): 1. OpenGL(OpenGr ...