查漏补缺(二)---列表与元组

2.2.1 索引

序列中的所有元素都是有编号的——从0开始递增。这些元素可以通过编号分别访问,如下例所示:

>>>greeting=‘Hello‘
>>>greeting[0]
‘H‘

字符串字面值(就此而言,其他序列字面量亦可)能够直接使用索引

>>>‘Hello‘[1]
‘e‘

2.2.2 分片

编号在这里尤为重要:

第1个索引是要提取的第1个元素的编号,而最后的索引则是分片之后剩余部分的第1个元素的编号:

>>>numbers=[1,2,3,4,5,6,7,8,9,10]
>>>numbers[3:6]
[4,5,6]
>>>numbers[0:1]
[1]

1.优雅的捷径

假设需要访问最后3个元素(先前的例子),那么当然可以进行显示的操作:

>>>numbers[7:10]
[8,9,10]

索引10指向的是第11个元素——这个元素并不存在,却是在最后一个元素之后。即为了让分片部分能够包含列表的最后一个元素,必须提供最后一个元素的下一个元素所对应的索引作为边界。

>>>numbers[-3:-1]
[8,9,10]
>>>numbers[-3:]
[8,9,10]

2.更大的步长

>>>numbers[0:10:2]
[1,3,5,7,9]

步长可以是复数,但不可以为0.

2.2.3 序列相加

两种相同类型的序列才能进行连接操作

2.2.4 乘法

用数字 x 乘以一个序列会生成新的序列,而在新的序列中,原来的序列将被重复 x 次:

>>>‘python‘*5
‘pythonpythonpythonpythonpython‘
>>>[42]*10
[42,42,42,42,42,42,42,42,42,42]

2.3 列表:Python 的“苦力”

2.3.1 list 函数

因为字符串不能像列表一样被修改,所以有时候根据字符串创建列表会很有用。list可以实现这个功能:

>>>list(‘Hello‘)
[‘H‘,‘e‘,‘l‘,‘l‘,‘o‘]

PS:list函数适用于所有类型的序列,而不只是字符串

2.3.2 基本的列表操作

1.改变列表:元素赋值

2.删除元素:从列表删除元素也很容易:使用del语句实现:

>>>names=[‘Alice‘,‘Beth‘,‘Cecil‘,‘Dee-Dee‘,‘Earl‘]
>>>del names[2]
>>>names
[‘Alice‘,‘Beth‘,‘Dee-Dee‘,‘Earl‘]

3.分片赋值

2.3.3 列表方法

1.append

2.count

count方法统计某个元素在列表中出现的次数:

>>>[‘to‘,‘be‘,‘or‘,‘not‘,‘to‘,‘be‘].count(‘to‘)
2
>>>x=[[1,2],1,1,[2,1,[1,2]]]
x.count(1)
2

3.extend

extend方法可以在列表的末尾一次性追加另一个序列中的多个值。换句话说,可以用新列表扩展原有的列表:

>>>a=[1,2,3]
>>>b=[4,5,6]
>>>a.extend(b)
>>>a
[1,2,3,4,5,6]

4.index

index方法用于从列表中找出某个值第一个匹配项的索引位置:

>>>knights=[‘we‘,‘are‘,‘knights‘,‘who‘,‘say‘,‘in‘]
>>>knights.index(‘who‘)
4

5.insert

>>>numbers=[1,2,3,5,6,7]
>>>numbers.insert(3,‘four‘)
>>>numbers
[1,2,3,‘four‘,5,6,7]

6.pop

pop方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值:

>>>x=[1,2,3]
>>>x.pop()
3
>>>x
[1,2]
>>>x.pop(1)
>>>x
[2]

pop方法是唯一一个既能修改列表又返回元素值(除了None)的列表方法

使用pop方法可以实现一种常见的数据结构——栈。栈的原理就像堆放盘子那样。只能在顶部放一个盘子,同样,也只能从顶部拿走一个盘子。最后被放入堆栈的最先被移出

(LIFO后进先出)‘

对于上述两个栈操作(放入和移除),它们有大家都认可的称谓——入栈(push)和出栈(pop)。Python没有入栈方法,但可以使用append方法来代替。pop方法和append方法的操作结果恰好相反,如果入栈(或者追加)刚刚出栈的值,最后得到的结果还是原来的栈。

>>>x=[1,2,3]
>>>x.append(x.pop())
>>>x
[1,2,3]

PS:实现先进先出(FIFO)的队列(queue),那么可以使用insert(0,..)来代替append方法。或者,继续使用append方法,但必须使用pop(0)来代替pop()。更好的解决方案是使用collection模块中的deque对象。

7.remove :用于移除列表中某个值的第一个匹配项

8.reverse:将列表中的元素反向存放

PS:对一个序列进行反向迭代,那么可以使用reversed函数。这个函数返回的是一个迭代器(iterator)对象,使用list函数把返回的对象转换成列表

>>>x=[1,2,3]
>>>list(reversed(x))
[3,2,1]

9.sort

前面介绍过几个改变列表却不返回值的方法,在大多数情况下这样的行为方式是很合常理的(例如append)。但是,当用户需要一个排好序的列表副本,同时又保留原有列表不变的时候,问题出现了:

>>>x=[4,6,2,1,7,9]
>>>y=x.sort() #don‘t do this
>>>print y
None

sort方法修改了x却返回了空值,那么最后得到的是已排序的x以及值为None的y。实现这个功能的正确方法是,首先把x的副本赋值给y,然后对y进行排序:

>>>x=[4,6,2,1,7,9]
>>>y=x[:]
>>>y.sort
>>>x
[4,6,2,1,7,9]
>>>y
[1,2,4,6,7,9]

另一种获取已排序的列表副本的方法是,使用sorted函数:

>>>x=[4,6,2,1,7,9]
>>>y.sorted(x)
>>>x
[4,6,2,1,7,9]
>>>y
[1,2,4,6,7,9]

sorted函数可以用于任何序列,却总是返回一个列表:

>>>sorted(‘Python‘)
[‘h‘,‘n‘,‘o‘,‘P‘,‘t‘,‘y‘]

10.高级排序

compare(x,y)函数会在 x < y 时返回负数,在 x > y 时返回正数,如果 x = y 则返回0

如果要根据元素的长度进行排序,那么可以使用len作为键函数:

>>>x=[‘aardvark‘,‘abalone‘,‘acme‘,‘add‘,‘aerate‘]
>>>x.sort(key=len)
>>>x
[‘add‘,‘acme‘,‘aerate‘,‘abalone‘,‘aardvark‘

sort方法有另外的两个可选的参数——key和reverse。

>>>x=[4,6,2,1,7,9]
>>>x.sort(reverse=True)
>>>x
[9.7,1,2,6,4]

2.4 元组

>>>1,2,3
(1,2,3)

>>>(1,2,3)
(1,2,3)

>>>()
()

>>>42,
(42,)

>>>3*(40+2,)
(42,42,42)
时间: 2024-10-20 07:58:19

查漏补缺(二)---列表与元组的相关文章

2019/5/12 查漏补缺

目录 2019/5/12 查漏补缺 数据类型分为两大类:基本类型和引用类型: java中类的继承关系 关于接口 重载和重写 静态变量 java中的关键字和保留字 数据库操作 实现数据库收回部分权限的操作 关于数据库错误类型 SQL四种语言: 数据库常见的四种故障 数据库设计六个阶段: Java的异常分为两种 外模式,内模式 数据库范式 语句null的书写 2019/5/12 查漏补缺 数据类型分为两大类:基本类型和引用类型: 基本类型只能保存一些常量数据,引用类型除了可以保存数据,还能提供操作这

java知识查漏补缺

一.重写(override)和重载(overload)的区别 二者除了名字相似,其实没什么联系 范围不同:重写发生在同一个类的不同方法之间.重载发生在父类和子类自荐. 前提: 重写要求:方法名相同,参数列表不同,对于返回值类型不要求相同. 重载要求:方法名形同,参数列表也相同.重载是实现多态的关键,注意如果父类中的方法是private类型,那么子类中对应方法不算重载,而相当于是定义了一个新方法. 二.final的用法 修饰类:该类不能被继承 修饰方法:该方法不能被重写 修饰属性:该属性初始化后不

Entity Framework 查漏补缺 (一)

明确EF建立的数据库和对象之间的关系 EF也是一种ORM技术框架, 将对象模型和关系型数据库的数据结构对应起来,开发人员不在利用sql去操作数据相关结构和数据.以下是EF建立的数据库和对象之间关系 关系数据库 对象 数据库 DbContext类 表 DbContext中的DbSet<实体类名> 表间的关联 实体类之间的关联 字段 实体类的公有属性 单条数据 单个实体类的对象 约束(主键.外键默认值) 实体类中的特性 了解EDM( 实体数据模型) EF使用概念模型. 映射和存储模型.三个模型来描

近来的java小总结(2.1):类的知识的查漏补缺

首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一些知

查漏补缺——java多态

---恢复内容开始--- 刚学完java,开始了查漏补缺阶段阶段,为了巩固自己的知识和为别人提供一些微末的帮助决定开通博客,求各位大牛们指出我的不足,不要吝惜言语,也希望我的总结可以对别人有帮助,对自己对他人负责. 开始正文:术语多态:可以定义为“有多种形态”,多态引用是一个一个在不同时刻可以指向不同类型对象的引用变量.通过多态引用可以调用不同的具体的方法. 类方法的多态性的实现有两种方式: 1:方法重载:可以声明多个同名但是参数不同(个数.类型和顺序)的方法.注意呵呵重载方法只能声明在一个类里

近来的java小总结(2.2):类的知识的查漏补缺

1 首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一

自家用的java小总结(2.4):类的知识的查漏补缺(内部类)

1 2      首先,这是一篇自己用的文章,不对读者承担任何责任,所以,要带着批判的眼光来看下面的文章   1 发现了,得加上输出结果,怕自己出错,~~   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但

查漏补缺

查漏补缺[1].this语句:this语句用于构造函数之间进行相互调用.this语句只能定义在构造函数的第一行,因为初始化要先执行.[2].对象的初始化过程 Person p =new Person("hei",10); 1.因为new用到了Person.class,所以先找到Person.class文件加载到内存中 2.执行类中的静态代码块,如果有的话,给Person.class类进行初始化 3.在堆内存中开辟空间,分配内存地址 4.在堆内存中建立对象的特有属性,并进行默认初始化 5

《CSS权威指南》基础复习+查漏补缺

前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司,事情不算多,于是拿起<CSS权威指南>进行"基础学习"+"查漏补缺",本篇文章主要是总结了些自己认为CSS中值的注意的几个知识点(本文知识点仅限本书范围内,若要讲CSS全部样式,那本兽还是选择慢慢懵逼去~). 选择器 这里要说明的是类选择器的嵌套选择与多类

hibernate查漏补缺2

Hibernate对象状态 瞬时(transient):由new操作符创建,且尚未Hibernate Session关联.瞬时对象不会被持久化到数据库,也不会被赋予持久化标识. 持久(persistent):持久化的实例在数据库中有对应的记录,并拥有一个持久化标识. 持久化的实例可能是刚被保存,或刚被加载的,无论哪一种,它都只存在于相关联的Session作用范围内.这点很重要.Hibernate会检测处于持久化状态的对象的任何变动,在当前操作单元执行完毕时,将对对象数据与数据库同步. 脱管(de