第二章 列表和元组

第二章 列表和元组

在Python中,最基本的数据结构为序列(包括列表、元组、字符串等)(sequence)
列表是可以修改的,而元组不可以
Python支持一种数据结构的基本概念,名为容器(container)
容器基本上就是可包含其他对象的对象
两种主要的容器是序列(如列表和元组)和映射(如字典)
在序列中,每个元素都有编号,而在映射中,每个元素都有名称(也叫)。
有一种既不是序列也不是映射的容器,它就是集合(set)

通用的序列操作

通用的序列操作包括索引切片相加相乘成员资格检查

1,索引

索引中,下标从0开始访问单个元素,0时第一个元素的位置
用负数索引时,Python将从右(即从最后一个元素)开始往左数,-1是最后一个元素的位置

beyond = "I love the band"
beyond[0]#结果为:I
beyond[2]#结果为:l
beyond[-1]#结果为:d
beyond[-2]#结果为:n
"beyond"[2]#结果为:yfourth = input('Year: ')[3] 
输入结果:Year: 1999 
输出结果:'9'

2,切片:

除使用索引来访问单个元素外,还可使用切片(slicing)来访问特定范围内的元素
简而言之,左闭右开
切片索引方向只能从左向右,不能反过来操作,即左小右大,左闭右开
若要反过来操作需要指定步长即可

number = [0,1,2,3,4,5,6,7,8,9]
number[1:3]#结果为:[1,2]
number[4:5]#结果为:[4]
number[8:10]#结果为:[8,9]   索引10,该元素压根不存在,但是没有报错,压根用不到,左闭右开number[-3:-1]#结果为:[7,8]
number[-1:-3]#结果为:[]
'''
如果第一个索引指定的元素位于第二个索引指定的元素后面
(在这里,倒数第3个元素位于第1个元素后面),结果就为空序列
'''#切片结束于序列末尾,可省略第二个索引
number[-3:]#结果为:[7,8,9]
#如果切片始于序列开头,可省略第一个索引
number[:3]#结果为:[0,1,2]
#要复制整个序列,可将两个索引都省略
number[:]#结果为:[0,1,2,3,4,5,6,7,8,9]

设置步长的切片
通常情况不写步长的时候,步长默认为1

number=[0,1,2,3,4,5,6,7,8,9]
number[0:5]#结果为:[0,1,2,3,4]
number[0:5:1]#结果为:[0,1,2,3,4]
#不写第三个参数步长的话默认为1number[0:10:2]#结果为:[0,2,4,6,8]  步长为2时,将从起点和终点之间每隔一个元素提取一个元素#要从序列中每隔3个元素提取1个,只需提供步长4即可
number[::4]#结果为:[0,4,8]#当然,步长不能为0,否则无法向前移动,但可以为负数,即从右向左提取元素
number[8:3:-1]#结果为:[8,7,6,5,4]
number[3:8:-1]#结果为:[]#步长为正数时,它从起点移到终点
#步长为负数时,它从终点移到起点
number[5::-2]#结果为:[5,3,1]
number[:5:-2]#结果为:[9,7]

3,序列相加+

[1,2,3] + [3,2,1]#结果为:[1,2,3,3,2,1]
'hello,' + "beyond"#结果为:'hello,beyond'[1,2,2] + "yanyu"#结果为:报错!!!
#一般而言,不能拼接不同类型的序列

4,乘法*

“beyond” * 5#结果为:'beyondbeyondbeyondbeyondbeyond'
[521] * 3#结果为:[521,521,521]'''
Python中None表示什么都没有,为空
将列表长度初始化为5如下:
'''
beyond = [None] * 5
beyond#结果为:[None,None,None,None,None]

5,成员资格in

要检查特定的值(可以是单个字符也可以是字符串)是否包含在序列中,可使用运算符in
它检查是否满足指定的条件,并返回相应的值,满足时返回True,不满足时返回False
这样的运算符称为布尔运算符,而前述真值称为布尔值

beyond = "yanyu like beyond"
'y' in beyond#结果为:True
'q' in beyond#结果为:Falseusers = ['yanyu','huangjiaju','yeshirong']
input('Enter your user name:') in users
Enter your user name:yanyu
#结果为:True

长度、最小值、最大值
函数len返回序列包含的元素个数minmax分别返回序列中最小最大的元素

beyond = [19,5,22]
len(beyond)#结果为:3
max(beyond)#结果为:22
min(beyond)#结果为:5max(1999,2005)#结果为:2005
min(98,55)#结果为:55

列表

函数list,使用字符串来创建列表
可将任何序列(而不仅仅是字符串)作为list的参数

list("beyond")#结果为:['b', 'e', 'y', 'o', 'n', 'd']

基本的列表操作包括索引切片拼接相乘,但列表的有趣之处在于
是可以修改的

1,修改列表:给元素赋值

beyond = [1,2,3,4,5]
beyond[1] = 99
beyond#结果为:[1,99,3,4,5]
#不能给不存在的元素赋值,因此如果列表的长度为2,就不能给索引为100的元素赋值

2,删除元素del

yanyu = ["yanyu",1999,'huangjiaju']
del yanyu[1]
yanyu#结果为:['yanyu','huangjiaju']

3,给切片赋值

yanyu = list("beyond")
yanyu#结果为:['b', 'e', 'y', 'o', 'n', 'd']yanyu[2:] = list('SQ')
yanyu#结果为:['b','e','S','Q']
yanyu[3:] = list("jiaju")
yanyu#结果为:['b', 'e', 'S', 'j', 'i', 'a', 'j', 'u']#在不替换原有元素的情况下插入新元素
yanyu[1:1] = [6,7,8]
yanyu#结果为:['b', 6, 7, 8, 'e', 'S', 'j', 'i', 'a', 'j', 'u']
yanyu[1:3] = []
yanyu#结果为:['b', 8, 'e', 'S', 'j', 'i', 'a', 'j', 'u']
'''
这很显然与del yanyu[1:3]等效
类推,也可以对执行步长不为1的切片进行赋值
'''

4,列表方法

方法是与对象(列表、数、字符串等)联系紧密的函数
object.method(arguments)
方法调用与函数调用很像,只是在方法名前加上了对象句点
列表包含多个可用来查看或修改其内容的方法

1,append,将一个对象附加到列表末尾

yanyu = [1,2,4,5,6]
yanyu.append(7)
yanyu#结果为:[1,2,4,5,6,7]

2,clear,就地清空列表的内容

yanyu = [1,2,3]
yanyu.clear()
yanyu#结果为:[]
#这类似于切片赋值语句yanyu[:] = []

3,copy,复制列表(将另一个名称关联到列表)

a = [1,2,3]
b = a
b[1] = 4
a#结果为:[1,4,3]
#将另一个名称关联到列表a = [1,2,3]
b = a.copy()
b[1] = 4
a#结果为:[1, 2, 3]
#这类似于使用a[:]或list(a),它们也都复制a

4,count,计算指定的元素在列表中出现了多少次

['to', 'be', 'or', 'not', 'to', 'be'].count('to') #结果为:2 x = [[1, 2], 1, 1, [2, 1, [1, 2]]] 
x.count(1) #结果为:2 
x.count([1, 2]) #结果为:1

5,extend,同时将多个值附加到列表末尾,可使用一个列表来扩展另一个列表

a = [1, 2, 3] 
b = [4, 5, 6] 
a.extend(b) 
a #结果为:[1, 2, 3, 4, 5, 6]
#很明显a这个列表已经发生了修改
'''
extend是将b扩展到a,a会发生变化会被扩展
而常规拼接+,只是返回一个新的序列,原本的不会被修改
'''
a = [1, 2, 3] 
b = [4, 5, 6] 
a + b #结果为:[1, 2, 3, 4, 5, 6] 
a #结果为:[1, 2, 3]
#很明显a这个列表并没有改变
a = a+b#结果为:[1, 2, 3, 4, 5, 6] 效果实现了 但是拼接的效率将比extend低a = [1, 2, 3] 
b = [4, 5, 6] 
a[len(a):] = b 
a #结果为:[1, 2, 3, 4, 5, 6] 
#这虽然可行,但可读性不是很高

6,index,查找指定值第一次出现的索引

yanyu= ['We', 'are', 'the', 'knights', 'who', 'say', 'huangjiaju'] 
yanyu.index('who') #结果为:4 who处于索引第4处
yanyu.index('xixihaha')#结果为:报错 其不存在

7,insert,用于将一个对象插入列表

numbers = [1, 2, 3, 5, 6, 7] 
numbers.insert(3, 'four') 
numbers #结果为:[1, 2, 3, 'four', 5, 6, 7]'''
与extend一样,也可使用切片赋值来获得与insert一样的效果
这虽巧妙,但可读性根本无法与使用insert媲美
'''
numbers = [1, 2, 3, 5, 6, 7] 
numbers[3:3] = ['four'] 
numbers #结果为:[1, 2, 3, 'four', 5, 6, 7]

8,pop,从列表中删除一个元素(末尾为最后一个元素),并返回这一元素

pop是唯一既修改列表返回一个非None值的列表方法

x = [1,2,3987]
x.pop()#结果为:7
x#结果为:[1,2,3,9,8]
x.pop(2)#结果为:3
x#结果为:[1,2,9,8]
'''
使用pop可实现一种常见的数据结构——栈(stack)后进先出
push和pop是大家普遍接受的两种栈操作(加入和取走)的名称
Python没有提供push,但可使用append来替代
方法pop和append的效果相反,因此将刚弹出的值压入(或附加)后,得到的栈将与原来相同要创建先进先出(FIFO)的队列,可使用insert(0, ...)代替append
另外,也可继续使用append,但用pop(0)替代pop()。
'''
x = [1,4,7]
x.append(x.pop())
x#结果为:[1,4,7]

9,remove,用于删除第一个为指定值的元素

remove是就地修改且不返回值的方法
不同于pop的是,它
修改列表
,但不返回任何值

x = ['I','love',"beyond",'and',"I",'hahaha']
x.remove("I")
x#结果为:
x.remove("SQ")#结果为:报错 原因为列表里面没有该元素

10,reverse,按相反的顺序排列列表中的元素

修改列表,但不返回任何值(与remove和sort等方法一样)

x = [1, 2, 3] 
x.reverse() 
x #结果为:[3, 2, 1]'''
如果要按相反的顺序迭代序列,可使用函数reversed
这个函数不返回列表,而是返回一个迭代器,不改变原来的列表
'''
x = [1, 2, 3] 
list(reversed(x)) #结果为:[3, 2, 1]
x#结果为:[1,2,3]

11,sort,用于对列表就地排序

sort方法:对原来的列表进行修改,使其元素按顺序排列,且不返回任何值!!!
sorted函数:可用于任何序列,但总是返回一个列表

x = [7,4,1,8,9,6,5,2,3]
x.sort()
x#结果为:[1,2,3,4,5,6,7,8,9]y = [9,5,1,7,8,6]
z = y.sort()
print(z)#结果为:None 其原因在于,sort不返回任何值!!!
y#结果为:[1,5,6,7,8,9]  y列表排序了,但是sort不返回任何值导致z为None#先将z关联到y的副本,再对z进行排序
y = [9,5,1,7,8,6]
z = y.copy()
z.sort()
z#结果为:[1, 5, 6, 7, 8, 9]  z进行排序
y#结果为:[9, 5, 1, 7, 8, 6]  y并未修改#另一种方式是使用函数sorted
x = [4, 6, 2, 1, 7, 9] 
y = sorted(x) 
y #结果为:[1, 2, 4, 6, 7, 9]
x #结果为:[4, 6, 2, 1, 7, 9] #如果要将元素按相反的顺序排列,可先使用sort(或sorted),再调用方法reverse,也可使用参数reversesorted('Python') #结果为:['P', 'h', 'n', 'o', 't', 'y']   大写字母<小写字母,相同类型字母a或A最小

12,高级排序

方法sort接受两个可选参数(关键字参数):keyreverse
参数key类似于参数cmp:你将其设置为一个用于排序的函数
参数reverse:只需将其指定为一个真值(True或False),以指出是否要按相反的顺序对列表进行排序
要根据长度对元素进行排序,可将参数key设置为函数len

x = ["qwert","asf",'zx',"vxcb",'sdfsd']
x.sort(key=len)
x#结果为:['zx', 'asf', 'vxcb', 'qwert', 'sdfsd']y = [4,6,8,2,1,9,7]
y.sort(reverse=True)
y#结果为:[9, 8, 7, 6, 4, 2, 1]

元组:不可修改的序列()

元组语法很简单,只要将一些值用逗号分隔,就能自动创建一个元组

1,2,3#结果为:(1, 2, 3)    元组
(1,2,3)#结果为:(1, 2, 3)  元组#逗号很关键,若只有一个数时,不加逗号就代表数,加上逗号代表元组
1999#结果为:1999        数
1999,#结果为:(1999,)    元组
(1999,)#结果为:(1999,)  元组

函数tuple的工作原理与list很像:它将一个序列作为参数,并将其转换为元组
如果参数已经是元组,就原封不动地返回它

tuple([1, 2, 3])#结果为:(1, 2, 3) 
tuple('abc')#结果为:('a', 'b', 'c') 
tuple((1, 2, 3))#结果为:(1, 2, 3)

元组的创建及其元素的访问方式与其他序列相同

x = 1, 2, 3 
x#结果为:(1,2,3)
x[1]#结果为:2 
x[0:2] #结果为:(1, 2)

本章节介绍的新函数

函 数描 述
len(seq)返回序列的长度
list(seq)将序列转换为列表
max(args)返回序列或一组参数中的最大值
min(args)返回序列和一组参数中的最小值
reversed(seq)让你能够反向迭代序列
sorted(seq)返回一个有序列表,其中包含指定序列中的所有元素
tuple(seq)将序列转换为元组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下mac风格菜单栏,ubuntu 8.04 安装mac风格菜单

ubuntu 8.04 安装mac风格菜单发布时间:2008-07-13 00:22:22来源:红联作者:bindex这只是一份草案文档&#xff0c;它可能会导致一些计算机故障。引言这份指南假定你没有在电脑上编译过其他程序&#xff0c;并且&#xff0c;假定你使用的是Ubuntu Gusty。1.使用deb包安装 32位系统…

解析法实现一元线性回归、多元线性回归以及数据模型可视化操作

目录【1】解析法实现一元线性回归python列表实现利用Numpy实现利用TensorFlow实现数据和模型可视化【2】解析法实现多元线性回归利用Numpy实现需要用到的NumPy数组运算函数数据和模型可视化绘制空间点集&#xff1a;绘制空间平面图&#xff1a;绘制线框图并且与散点图对比&…

带有示例的Python File readlines()方法

文件readlines()方法 (File readlines() Method) readlines() method is an inbuilt method in Python, it is used to get all lines from the file, the method is called with this object (current file stream/IO object) and returns all available lines in the file, w…

32位系统win2008+mssql2008 6G内存折腾纪实

十年没搞硬件了&#xff0c;现在计算机发展到大硬盘大内存的时代了。一直都少搞服务器配置、运营&#xff0c;以前弄服务器都是普通的PC来当服务器。公司原来的一个业务系统用的是mssql2000好几年了&#xff0c;由于业务数据越积压越多最大的一张表已经有7000多万条记录了&…

case使用 上下篇

上篇 Case具有两种格式。简单Case函数和Case搜索函数。 --简单Case函数 CASE sexWHEN 1 THEN 男WHEN 2 THEN 女 ELSE 其他 END --Case搜索函数 CASE WHEN sex 1 THEN 男WHEN sex 2 THEN 女 ELSE 其他 END这两种方式&#xff0c;可以实现相同的功能。简单Case函数的写法相对比…

第三章 字符串

第三章 字符串% 字符串是不可变的&#xff0c;所有的元素赋值和切片赋值都是非法的 Python提供了多种字符串格式设置方法 yanyu "hello, %s I like %s age is %s" beyond ("beyond","band",23) yanyu % beyond#结果为&#xff1a;hello, bey…

【视觉项目】【day5】8.25号实验记录(修完BUG,28张测试图,13个样本,四张测试图误判,这比之前效果好很多了)

目录修改完BUG后的程序以及效果优化思路&#xff0c;增强正确识别率&#xff08;待验证&#xff09;修改完BUG后的程序以及效果 修改代码后的测试结果&#xff1a;(利用连通域面积将明显比本张测试图的瓶子要小的模板提前去除&#xff0c;减少误判) 这样下来&#xff0c;28张测…

linux kernel and user space通信机制,Linux内核空间与用户空间通信机制地研究.doc

实用文案标准文档Linux内核空间与用户空间通信机制的研究Linux kernel space and user space communication mechanism摘 要Linux 是一个源码开放的操作系统&#xff0c;无论是普通用户还是企业用户都可以编写自己的内核代码&#xff0c;再加上对标准内核的裁剪从而制作出适合自…

前台用js、jquery出现错误很多是由于IE缓存

例如&#xff1a;当你用jquery进行异步请求数据时&#xff0c;如果浏览器发现请求的地址不变&#xff0c;或者参数也不改变的情况下 IE默认是取原来的缓存中的数据&#xff0c;而不进行重新请求数 解决的方法是是在地址栏的后面加上一个随机参数值&#xff0c;IE发现地址改变&a…

python 示例_带有示例的Python date timetuple()方法

python 示例Python date.timetuple()方法 (Python date.timetuple() Method) date.timetuple() method is used to manipulate objects of date class of module datetime. date.timetuple()方法用于操作模块datetime的日期类的对象。 It is an instance method which means …

WebC.BBS 项目参与新人必读

开发环境: 采用Visual Studio 2010&#xff0c;MVC版本采用Asp.Net MVC3&#xff0c;数据库采用Sql2005 2008,扩展技术包括jQuery。 SVN的相关信息&#xff1a; SVN-Url&#xff1a;svn://svn.cyqdata.com/project_bbs 账户申请&#xff1a;请将自己的密码发给组长&#xff0c;…

第四章 字典

第四章 字典{键:值,名字:电话号码} 映射&#xff1a;通过名称来访问其各个值的数据结构 列表&#xff1a;将一系列值组合成数据结构并通过编号来访问各个值 字典是Python中唯一的内置映射类型&#xff0c;其中的值不按顺序排列&#xff0c;而是存储在键下 键可能是数、字符串…

利用梯度下降法求解一元线性回归和多元线性回归

文章目录原理以及公式【1】一元线性回归问题【2】多元线性回归问题【3】学习率【4】流程分析&#xff08;一元线性回归&#xff09;【5】流程分析&#xff08;多元线性回归&#xff09;归一化原理以及每种归一化适用的场合一元线性回归代码以及可视化结果多元线性回归代码以及可…

linux x64 asm 参数传递,NASM汇编学习系列(1)——系统调用和参数传递

0. 说明本学习系列代码几乎完全摘自&#xff1a;asmtutor.com&#xff0c;如果英文可以的(也可以用谷歌浏览器翻译看)&#xff0c;可以直接看asmtutor.com上的教程系统环境搭建&#xff1a;(我用的是ubuntu18.04.4 server&#xff0c;安装gcc、g)sudo apt install nasmsudo apt…

Javascript之创建对象(原型模式)

我们创建的每个函数都有一个prototype(原型)属性&#xff0c;这个属性是一个指针&#xff0c;指向一个对象&#xff0c;它的用途是包含可以有特定类型的所有实例共享的属性和方法。 prototype就是通过构造函数而创建的那个对象的原型对象。使用原型的好处就是可以让所有对象实例…

treeset java_Java TreeSet pollLast()方法与示例

treeset javaTreeSet类pollLast()方法 (TreeSet Class pollLast() method) pollLast() method is available in java.util package. pollLast()方法在java.util包中可用。 pollLast() method is used to return the last highest element and then remove the element from thi…

第五章 条件、循环及其他语句

第五章 条件、循环及其他语句 再谈print和import print现在实际上是一个函数 1&#xff0c;打印多个参数 用逗号分隔&#xff0c;打印多个表达式 sep自定义分隔符&#xff0c;默认空格 end自定义结束字符串&#xff0c;默认换行 print("beyond",yanyu,23)#结果为…

两种方法将Android NDK samples中hello-neon改成C++

一、第一种方法&#xff1a;1.修改helloneon.c 中代码 a.将 char* str; 改为 char str[512] {0}; b.将 asprintf(&str, "FIR Filter benchmark:\nC version : %g ms\n", time_c); 改为 sprintf(str, "FIR Filter benchmark:\nC ve…

【视觉项目】【day6】8.26关于matchTemplate()以及NCC的思考整理

NCC与matchTemplate()函数中match_method TM_CCOEFF_NORMED是否一样&#xff1f; 先看公式&#xff1a; TM_CCOEFF_NORMED NCCTM_CCOEFF_NORMED:归一化的相关性系数匹配方法 NCC:normalized cross correlation:归一化互相关系数 公式是一样的。 参考&#xff1a; 模板匹配的几…

linux待机流程,Linux睡眠喚醒機制--Kernel態

一、對於休眠(suspend)的簡單介紹 在Linux中,休眠主要分三個主要的步驟: 1) 凍結用戶態進程和內核態任務2) 調用注冊的設備的suspend的回調函數, 順序是按照注冊順序3) 休眠核心設備和使CPU進入休眠態, 凍結進程是內核把進程列表中所有的進程的狀態都設置為停止,並且保存下…