python学习笔记五——数据结构
4 . python的数据结构
数据结构是用来存储数据的逻辑结构,合理使用数据结构才能编写出优秀的代码。python提供的几种内置数据结构——元组、列表、字典和序列。内置数据结构是Python语言的精华,也是使用python进行开发的基础。
4.1 元组结构
元组是Python中常用的一种数据结构。元组由不同的元素组成,每个元素可以存储不同类型的数据,如字符串、数字甚至元组。元组是“写保护”的,即元组创建后不能再做任何修改操作,元组通常代表一行数据,而元组中的元素代表不同的数据项。
4.1.1 元组的创建
tuple(元组)是python内置的一种数据结构。元组由一系列元素组成,所有元素被包含在一对圆括号中。创建元组时,可以不指定元素的个数,相当于不定长的数组,但是一旦创建后就不能修改元组的长度。元组创建的格式如下所示:
tuple = (元素1,元素2,...)
元组的初始化示例如下:
tuple = ("apple" , "banana" , "grape" , "orange")
上面这行代码创建了一个名为tuple的元组,该元组由4个元素组成,元素之间使用逗号分隔。如果需要定义一个空的元组,表达方式更简单。创建空的元组只需要一对空的圆括号。如:
tuple = ()
如果创建的元组只包含一个元素,通常会错误地忽略单元素后的逗号。这样,python无法区分变量tuple是元组还是表达式,python误认为圆括号中的内容为表达式,因此tuple[0]输出的结果并非期望的值,并且其类型也不是tuple。正确的写法如下:
- tuple = ["apple" , ] #定义元组,注意后面的逗号不可少
- print (tuple[0]) #打印第一个元素
- print (type(tuple)) #打印定义的tuple的类型
- [root@Dannyserver danny]# python .py
- apple
- <class 'list'>
元组是从0开始计数的,因此tuple[0]获得的是元组tuple中第1个元素。python中其他的数据结构也遵循这个规则。
4.1.2 元组的访问
访问格式:tuple[n] ,n可以是0、正负整数。
输出:print (tuple[n])
可以把元组理解为C或者Java中的数组。
注意:元组创建后其内部元素的值不能被修改。元组中的元素不支持赋值操作。
提示:元组不能添加或删除任何元素。因此,元组不存在任何添加、删除元素的方法,元组也不存在任何其他方法。
元组的访问还有一些特殊的用法,例如负数索引和分片索引。这两个特性是python的特殊用法,C或者Java语言并不支持。负数索引从元组的尾部开始计数,最尾端的元素索引表示“-1”,次尾端的元素索引表示“-2”,以此类推。
分片是元组的一个子集,分片是从第1个索引到第2个索引(不包含第2个索引所指向的元素)所指定的所有元素。分片索引可以为正数或负数,两个索引之间用冒号分隔。分片的格式如下:
tuple[m:n] 其中m、n可以是0、正整数或负整数。
例:
- tuple=("apple","banana","grape","orange") #定义元组
- print (tuple[-1])
- print (tuple[-2])
- tuple2 = tuple[1:3] #分片,第二个元素到第三个元素(不包括第四个)
- tuple3 = tuple[0:-2] #分片,从第一个元素到倒数第二个元素(不包括倒数第二个)
- tuple4 = tuple[2:-1] #分片,从第三个元素到倒数第一个元素(不包括倒数第一个)
- print (tuple2)
- print (tuple3)
- print (tuple4)
- [root@Dannyserver danny]# python .py
- orange
- grape
- ('banana', 'grape')
- ('apple', 'banana')
- ('grape',)
元组还可以由其他元组组成。例如,二元元组可以表示为:
tuple = (('t1' , 't2'), ('t3' , 't4'))
该元组是一个二元元组,该元组由('t1' , 't2')和('t3' , 't4')组成。
例:
- fruit1 = ("apple", "banana")
- fruit2 = ("grape", "orange")
- tuple = (fruit1, fruit2)
- print (tuple)
- print ("tuple[0][1] =", tuple[0][1]) #打印输出第一个元组的第二个元素
- print ("tuple[1][1] =", tuple[1][1]) #打印输出第二个元组的第二个元素
- [root@Dannyserver danny]# python a.py
- (('apple', 'banana'), ('grape', 'orange'))
- tuple[][] = banana
- tuple[][] = orange
创建元组的过程,python称为“打包”。相反,元组也可以执行“解包”的操作。“解包”可以将打包元组中的各个元素分别赋值给多个变量,降低了代码的复杂性,使表达方式更自然。“打包”和“解包”例:
- #打包
- tuple = ("apple", "banana", "grape", "orange")
- #解包
- a, b, c, d = tuple #将元组中的元素分别赋值给a,b,c,d
- print(a,b,c,d)
- [root@Dannyserver danny]# python a.py
- apple banana grape orange
4.1.3 元组的遍历
元组的遍历是指通过循环语句依次访问元组中各元素的值。遍历元组需要用到两个函数range()和len()。range()和len()都是python的内建函数,这些函数可直接调用,不需要import语句导入模块。内建函数是Python自动导入的函数,相当与Java中的lang包。
len()计算出tuple元组中元素的个数,range()返回一个由数字组成的列表。
例:
- tuple = (("apple","banana"),("grape","orange"),("watermelon", ),("grapefruit", ))
- for i in range(len(tuple)):
- print("tuple[%d]:" %i)
- for j in range(len(tuple[i])):
- print(tuple[i][j])
- print()
- [root@Dannyserver danny]# python a.py
- tuple[]:
- apple
- banana
- tuple[]:
- grape
- orange
- tuple[]:
- watermelon
- tuple[]:
- grapefruit
也可以用for实现遍历元组
- tuple = (("apple","banana"),("grape","orange"),("watermelon", ),("grapefruit", )) #定义一个二元元组
- for i in tuple:
- for j in i:
- print(j)
- [root@Dannyserver danny]# python a.py
- apple
- banana
- grape
- orange
- watermelon
- grapefruit
4.2 列表结构
列表是Python中非常重要的数据类型,通常作为函数的返回类型。列表和元组相似,也是由一组元组组成,列表可以实现添加、删除和查找操作,元素的值可以被修改。
4.2.1 列表的创建
List(列表)是Python内置的一种数据结构。它由一系列元素组成,所有元素被包含在一对方括号中。列表创建后,可以执行添加或删除操作。格式如下:
list = [元素1, 元素2, ...]
列表的添加可以调用append(),该方法的声明如下所示。
append(object)
其中,object可以是元组、列表、字典或任何对象。
列表的删除可以调用remove(),该方法的声明如下所示。
remove(value)
该方法也可删除元素value。如果value不在列表中,python将抛出异常。
- list = ["apple","banana","grape","orange"] #定义列表
- print(list)
- print(list[2])
- list.append("watermelon") #在列表末尾添加元素
- list.insert(1,"grapefruit") #向列表中插入元素
- print(list)
- list.remove("grape") #从列表中移除grape
- print(list)
- print(list.pop()) #打印从列表中弹出的元素,即最后一个元素。pop()表示取出最后一个元素
- print(list)
- [root@Dannyserver danny]# python b.py
- ['apple', 'banana', 'grape', 'orange']
- grape
- ['apple', 'grapefruit', 'banana', 'grape', 'orange', 'watermelon']
- ['apple', 'grapefruit', 'banana', 'orange', 'watermelon']
- watermelon
- ['apple', 'grapefruit', 'banana', 'orange']
注意:如果list列表中存在两个相同的元素,此时调用remove()移除同名元素,将只删除List列表中靠前的元素。
4.2.2 列表的使用
列表的使用与元组十分相似,同样支持负数索引、分片以及多远列表等特性,但是列表中的元素可修改,而且存在一些处理列表的方法。
- list = ["apple","banana","grape","orange"] #定义列表
- print(list[-2])
- print(list[1:3])
- print(list[-3:-1])
- list = [["apple","banana"],["grape","orange"],["watermelon"],["grapefruit"]]
- for i in range(len(list)):
- print("list[%d]:" %i)
- for j in range(len(list[i])):
- print(list[i][j])
- print()
- [root@Dannyserver danny]# python b.py
- grape
- ['banana', 'grape']
- ['banana', 'grape']
- list[]:
- apple
- banana
- list[]:
- grape
- orange
- list[]:
- watermelon
- list[]:
- grapefruit
列表实现了连接操作的功能,列表的连接同样提供了两种方式,一种是调用extend()连接两个不同的列表,另一种是使用运算符“+”或“+=”。
- list1=["apple","banana"]
- list2=["grape","orange"]
- list1.extend(list2) #list1连接list2
- print(list1)
- list3=["watermelon"]
- list1=list1+list3 #将list1与list3连接后赋给list1
- print(list1)
- list1+=["grapefruit"] #使用+=给list1连接上["grapefruit"]
- print(list1)
- list1=["apple","banana"]*2 #连接两个相同的列表
- print(list1)
- [root@Dannyserver danny]# python c.py
- ['apple', 'banana', 'grape', 'orange']
- ['apple', 'banana', 'grape', 'orange', 'watermelon']
- ['apple', 'banana', 'grape', 'orange', 'watermelon', 'grapefruit']
- ['apple', 'banana', 'apple', 'banana']
python学习笔记五——数据结构的更多相关文章
- Python学习笔记系列——数据结构相关
Python有4种数据结构:列表(list).字典(dictionary).元组(Tuple).集合(set).从最直接的感官上来说,这四种数据结构的区别是:列表中的元素使用方括号括起来,字典和集合是 ...
- python学习笔记五 模块上(基础篇)
模块学习 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...
- Python学习笔记五
一. 递归 递归函数: def a (): print ("from b") b() def b(): print("from a ") a() a() 递推和 ...
- Python学习笔记五:错误与异常
一:常见异常与错误 BaseException 所有异常的基类SystemExit 解释器请求退出KeyboardInterrupt 用户中断执行(通常是输入^C)Exception 常规错误的基类S ...
- python学习笔记(五):装饰器、生成器、内置函数、json
一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...
- Python学习笔记——基本数据结构
列表list List是python的一个内置动态数组对象,它的基本使用方式如下: shoplist = ['apple', 'mango', 'carrot', 'banana'] print 'I ...
- Python学习笔记(3)--数据结构之列表list
Python的数据结构有三种:列表.元组和字典 列表(list) 定义:list是处理一组有序项目的数据结构,是可变的数据结构. 初始化:[], [1, 3, 7], ['a', 'c'], [1, ...
- Python学习笔记五(读取提取写入文件)
#Python打开读取一个文件内容,然后写入一个新的文件中,并对某些字段进行提取,写入新的字段的脚本,与大家共同学习. import os import re def get_filelist(dir ...
- Python学习笔记(五)函数和代码复用
函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print().同样,你也可以自己创建函数, ...
随机推荐
- linux shell脚本调用java main方法 代码
#!/bin/sh # #该脚本为Linux下启动java程序的通用脚本.即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用. # #Author: tuda ...
- 在centos7上修改docker加速镜像为阿里云
使用docker pull,命令下载镜像太慢了,默认是从国外的,本文记录下如何配置国内阿里云竞相加速方式. 登录https://cr.console.aliyun.com,如下, 阿里云会为每个用户提 ...
- 207. Course Schedule
https://blog.csdn.net/wongleetion/article/details/79433101 问题的实质就是判断一个有向图是否有环,利用入度去解决这个问题 使用bfs解决问题. ...
- ubuntu 系统升级 cmake
由于Ubuntu14.04的cmake版本为2.8.x,而如果需要cmake3.x版本时,无法生成makefile,有两种方法可以安装cmake3.4.1: 方法1: sudo apt-get ins ...
- <转>jmeter(十四)HTTP请求之content-type
本博客转载自:http://www.cnblogs.com/dinghanhua/p/5646435.html 个人感觉不错,对jmeter最常用的取样器http请求需要用到的信息头管理器做了很好的解 ...
- SkylineGlobe 如何实现绘制圆形Polygon和对图层的圆形范围选择查询
//结束绘制圆形之前,得到Polygon var pos = gPolyObj.Position; var bufferR = gPolyObj.Radius; var cVerticesArray ...
- 安装Debian后做的一些事情
1.source.list # aliyun deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib deb http: ...
- Python 爬取 11 万 Java 程序员信息竟有这些重大发现!
一提到程序猿,我们的脑子里就会出现这样的画面: 或者这样的画面: 心头萦绕的字眼是:秃头.猝死.眼镜.黑白 T 恤.钢铁直男-- 而真实的程序猿们,是每天要和无数数据,以及数十种编程语言打交道.上能手 ...
- BZOJ4552 HEOI/TJOI2016 排序 线段树、二分答案
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4552 题意:给出一个$1$到$N$的全排列,对其进行$M$次排序,每次排序将区间$[l ...
- HDU 6165 FFF at Valentine
题目大意:给出一个有向图,问你这个图中是否对于任意两点\(u,v\),都至少满足\(u\to v\)(\(u\)可到达\(v\),下同)或\(v\to u\)中的一个. 一看就是套路的图论题,我们先把 ...