在介绍了通用的序列操作后,我们来学习序列类型中的列表和元组

列表

回顾

我们已经初步学习了列表,在深入之前,让我们简单回顾一下以往的知识。

创建列表的方法:

>>> list_1 = []  # 创建空列表
>>> list_2 = list() # 创建空列表
>>> list_3 = [1,2,3,4] # 创建带有元素的列表
>>> list_4 = list('abcd') # 创建一个列表 ['a','b','c','d'] (这是没学习过的)

给元素赋值:

>>> x = [1,2,3]
>>> x[1] = 2 # 将索引为1的元素赋值为2
>>> x
[1, 2, 3]

删除元素:

>>> del x[0]
>>> x
[2, 3]

上一节我们还学习了分片、相加、乘法等通用序列操作,这里就不过多阐述

分片赋值

在上一节中,我们介绍了通用的序列分片操作。事实上,列表的分片操作并未在此停下脚步。

对于列表,我们还可以使用分片来批量赋值元素:

>>> x = list('abcd')
>>> x
['a', 'b', 'c', 'd']
>>> x[1:3] = list('ef') # 将索引为1和索引为2的元素分别替换成'e'、'f'
>>> x
['a', 'e', 'f', 'd']

用于替换的序列不必要与原序列等长:

>>> x = [1,2,3,4,5]
>>> x[1:3] = ['a', 'b', 'c'] # list_1[1:3]长度为2,但我们替换的序列长度为3
>>> x
[1, 'a', 'b', 'c', 4, 5]

如果对分片很熟悉,理解下面这个分片操作应该不会有难度:

>>> x = [1,2,3]
>>> x[1:1]
[]

截取索引1到索引1(不包括1)的元素,因为第二个索引的元素是不包括在返回的序列中的,而第一个索引的又是这个不应包括的元素,所以返回了空序列。

想象一下,list_1[1:1]这个空序列是索引0和索引1之间的“空隙”,那为什么不是1和2之间呢?因为第二个索引1指定的是分片操作的终点,而分片又不包括终点,所以list_1[1:1]当然是终点索引1之前的空隙了。

说到这里,读者们是否有想到什么清奇的操作呢? (⊙ˍ⊙)

借助这个看似奇怪的逻辑,我们可以插入一个序列 (°ー°〃)

>>> x = [1,2,3,4,5]
>>> x[1:1] = ['a','b','c']
>>> x
[1, 'a', 'b', 'c', 2, 3, 4, 5]

对上面的代码,我们可以理解成把一个空序列“替换”成一个新的序列。

既然可以插入,那么批量删除也是可以的:

>>> x = [1,2,3,4,5]
>>> x[1:4] = []
>>> x
[1, 5]

列表方法

append

append方法用于给列表在末尾追加一个元素:

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

pop方法用于移除指定索引(默认为-1,即尾部)的元素,并且返回这个元素:

>>> x = [1,2,3]
>>> x.pop()
3
>>> x
[1, 2]
>>> x.pop(0) # 移除索引为0的元素
1

提示:利用append和pop可以实现计算机中十分常见的一种数据结构——栈,栈是一种后进先出(LIFO,Last In First Out)的数据结构,push操作把元素放入栈,像堆叠积木一样,pop操作把顶层的“积木”移除,也就是最后放置的元素最先拿出,把列表当作栈,只需用append方法实现push操作,用pop方法实现pop操作。本系列教程不涉及更深的数据结构的学习,有兴趣的读者可以找找课程学习。

insert

insert方法可以把元素插入到指定的索引之前:

>>> x = [1,2,3]
>>> x.insert(1, 'a')
>>> x
[1, 'a', 2, 3]

使用分片赋值也是可以的:

>>> x = [1,2,3]
>>> x[1:1] = []
>>> x[1:1] = ['a']
>>> x
[1, 'a', 2, 3]

不过比起insert方法,分片赋值的方式可读性比较差

remove

remove方法用于移除列表中某个元素的第一个匹配项:

>>> x = [1,2,3,2,1,3]
>>> x.remove(2)
>>> x
[1, 3, 2, 1, 3]
>>> x.remove(5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list

相信大家也看到,如果元素不存在,程序将抛出错误

index

index方法用于返回某个元素的第一个匹配项的索引:

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

同样的,如果元素不存在,则抛出错误:

>>> x.index(5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 5 is not in list

count

count方法用于数数,数什么数?数元素出现的次数:

>>> x = [1,2,3,2,2,1]
>>> x = [1,2,[2],2,[1,2],2]
>>> x.count(2)
3
>>> x.count([1,2])
1
>>> x.count(11)
0
extend

extend方法用于附加一个序列至列表末尾:

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

这个操作类似于序列相加操作:

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a = a + b
>>> a
[1, 2, 3, 4, 5, 6]

但是使用extend方法效率比较高

我们还可以使用分片赋值的方式来实现与extend相同的效果:

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a[len(a):] = b
>>> a
[1, 2, 3, 4, 5, 6]

但这比起extend,可读性变差了,所以还是使用extend方法比较好

reverse

reverse方法用于翻转列表:

>>> x = [1,2,3,4,5]
>>> x.reverse()
>>> x
[5, 4, 3, 2, 1]

如果仅仅想得到翻转后的列表,而不修改原列表,可以使用反向索引的分片来实现:

>>> x = [1,2,3,4,5]
>>> x[::-1]
[5, 4, 3, 2, 1]

如果需要反向迭代列表,还可以使用reversed函数创建一个反向迭代列表的迭代器:

>>> x = [1,2,3,4,5]
>>> for i in reversed(x):
... print(i)
...
5
4
3
2
1
>>> list(reversed(x)) # 还可以使用list函数来将迭代器转换成列表
[5, 4, 3, 2, 1]
sort

sort方法用于对列表进行排序。

>>> x = [3,2,4,8,6]
>>> x.sort()
>>> x
[2, 3, 4, 6, 8]

要注意的是这个方法是对原列表进行修改的,如果不想修改原列表而获取排序结果,可以使用sorted函数:

>>> x = [3,2,4,8,6]
>>> sorted(x)
[2, 3, 4, 6, 8]

sort方法还可以自定义排序的方式,比如把10排在1之前,把'a'排在3之前等等,在python2中只需提供一个参数,这个参数是一个比较函数,但是python3取消了这个参数,需要使用其它方式来自定义排序的方式,这里就不深入了解了,读者们可以去python官网查看文档学习。


元组

元组的基本操作和列表一样,但是元组是不可修改的,所以没有append、remove等修改序列的方法,只有count和index方法。

基本操作如下:

创建元组:

>>> tuple_1 = () # 空元组
>>> tuple_2 = tuple() # 空元组
>>> tuple_3 = 1,2,3
>>> tuple_4 = (1,2,3,4)

索引元素:

>>> x = (1,2,3,4)
>>> x[1]
2

count、index方法:

>>> x = (1,2,2,3,4,5,3,2)
>>> x.count(2)
3
>>> x.index(3)
3

还有分片、相加等通用序列操作,上节已介绍,这里不过多阐述

元组的意义在于:

  1. 元组可以作为字典等映射类型的,而列表不可以,因为键必须是不可变的,元组刚好就是不可变类型,而列表是可变类型。
  2. 函数返回多个值的时候,其实就是返回了一个元组,我们必须对元组进行处理。

好了,本节到此结束,下期再见!

ヾ( ̄▽ ̄)Bye~Bye~

python教程(五)·列表与元组的更多相关文章

  1. python基础之列表list元组tuple

    作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7041763.html python基础之列表list元组tuple 列表li ...

  2. Python 学习笔记(1)Python容器:列表、元组、字典与集合

    Python容器:列表.元组.字典与集合 列表: 1.列表 的创建 使用[ ] 或者 list()创建列表:empty_list = [ ] 或者 empty_list= list() 使用list( ...

  3. python 变量、列表、元组、字典

    python 变量.列表.元组.字典 1.python 变量赋值 2.ptython  列表 3.python 元组 4.python  字典 1.  Python变量赋值     1.1变量的命名规 ...

  4. .Net程序员之Python基础教程学习----列表和元组 [First Day]

    一. 通用序列操作: 其实对于列表,元组 都属于序列化数据,可以通过下表来访问的.下面就来看看序列的基本操作吧. 1.1 索引: 序列中的所有元素的下标是从0开始递增的. 如果索引的长度的是N,那么所 ...

  5. Python数据类型(列表和元组)

    1.3 List(列表) 列表由一系列按特定顺序排列的元素组成. 在Python中,用方括号[ ]来表示列表,并用逗号来分隔其中的元素. 1.3.1 访问列表元素 在Python中,第一个列表元素的索 ...

  6. python 数据类型二 (列表和元组)

    一.列表 1.1 列表的介绍 列表是python的基本数据类型之一,其他编程语言也有类似的数据类型,比如JS中的数组,java中的数组等等,它是以[]括起来,每个元素用逗号隔开,而且可以存放各种数据类 ...

  7. 第三章 Python容器:列表、元组、字典与集合

      数据结构的分类依据?基本的"数组"在python中是列表, 数据结构的作用?容器,盛放数据,是由原子组成的分子.可以将一群数据进行整合.拆分.重排. 3.2 列表 列表是啥?顺 ...

  8. Python基础学习 -- 列表与元组

    本节学习目的: 掌握数据结构中的列表和元组 应用场景: 编程 = 算法 + 数据结构 数据结构: 通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些元素可以是数字或者字符,或者其他数据 ...

  9. Python学习_03_列表、元组、字符串

    列表.元组.字符串这些通过顺序访问的对象统称为序列. 序列的标准操作符 对于一般的序列对象,包括列表.元组.字符串,都具有以下的标准操作: 1. element [not] in seq判断一个元素是 ...

  10. Python数据基础--列表、元组、字典、函数

    一.数据结构 列表(List)和元组 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内 ...

随机推荐

  1. 如何去掉HTML代码来获取纯文本?

    public string TextNoHTML(string Htmlstring) { //删除脚本 Htmlstring = Regex.Replace(Htmlstring, @"& ...

  2. python之路——网络基础

    你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运行,你就会发现,这两个python的文件分别运行的很好.但是如果这两个程序之间想要传递一个数据,你要怎么做 ...

  3. 打通版微社区(5):部署DZ3.2

    参考官方帖子http://www.discuz.net/thread-3258186-1-1.html  这是第三方的帖子http://www.discuz.net/thread-3199850-1- ...

  4. ESS控制台发布新功能:创建多实例规格的伸缩配置

    背景 原弹性伸缩ESS服务限定,生效的伸缩配置中只能对应一种实例规格,这样就会存在如果生效的配置中的实例规格的库存不足(高配实例规格通常更容易出现库存不足的情况)时, 用户配置好的伸缩规则以及伸缩组对 ...

  5. 安装kubernetes 环境

    master: 10.6.2.170     #master节点兼做仓库 node-1: 10.6.2.171 node-2: 10.6.2.172 1.添加host解析 # cat << ...

  6. 宝塔面板 + Rancher + 阿里云镜像仓库 + Docker + Kubernetes,添加集群、部署 web 应用

    目录 一,安装宝塔面板(V 6.8) 二,使用宝塔安装 Docker,配置阿里云容器服务 三,安装 Rancher (Server) 四,管理 Rancher.添加集群 五,添加 Rancher 应用 ...

  7. lambdas vs. method groups

    Update: Due to a glitch in my code I miscalculated the difference. It has been updated. See full his ...

  8. December 22nd 2016 Week 52nd Thursday

    The best hearts are always the bravest. 心灵最高尚的人,往往也是最勇敢的人. Keep conscience clear, don't let too many ...

  9. 高可用web框架

    nginx nginx简介 Nginx是一个自由.开源.高性能及轻量级的HTTP服务器及反转代理服务器.Nginx以其高性能.稳定.功能丰富.配置简单及占用系统资源少而著称. Nginx 超越 Apa ...

  10. 无法执行程序。所执行的命令为 "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe" /noconfig /fullpaths @"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\b411ea32\b48a9fb\aun5r0xd.c

    解决方案 将应用程序池进程模型中的标识设为“LocalSystem”即可.