距离上次的小项目已经休息了很长一段时间,是时候来继续本系列教程了。这一节开始我们将深入python中的数据结构。

序列的概念

在python中,最基本的数据结构是序列,序列包含一个或多个元素,每个元素有一个序号,也就是元素的位置,也称为索引。第一个索引是0,第二个是1,以此类推。

说到这里,可能大家都想到了列表。确实,python中有好几种内建(自带)的序列,列表就是其中一种,当然,元组也是。其他的内建序列类型有字符串、字节串等。

至于字符串,它其实就是一个由许多字符组成的序列,索引0指向第一个字符,索引1指向第二个字符……

本系列教程主要学习列表元组字符串这三种序列,字节串不详细讨论。

通用序列操作

所有的序列类型都有一些共同的操作,这些操作包括:索引分片加法乘法还有检查某个元素是否包含在序列中。除此以外,python中还有一系列针对序列的内建函数。

索引

索引操作其实就是通过索引访问元素的操作,十分简单,况且之前也有提过,在这里直接给出例子:

>>> s = 'hello'
>>> s[0] # 正向索引
'h'
>>> s[-1] # 反向索引
'o'
>>>

要注意的是,反向索引时,末尾元素的索引应该是-1,而不是-0,因为-0就是0,不然就与首元素索引重合了。

分片

索引只可以访问一个元素,而分片可以访问一定区间(范围)内的元素。分片通过冒号隔开的两个索引来实现,前一个索引表示起点(包括起点),后一个索引包括终点(不包括终点):

>>> s = 'hello world'
>>> s[0:5]
'hello'
>>> lst = [1, 2, 3, 4, 5]
>>> lst[1:-1]
[2, 3, 4]

省略第一个索引表示从首元素开始:

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

省略第二个索引表示索引的范围包含起点以及起点之后的所有元素:

>>> lst = [1, 2, 3, 4, 5]
>>> lst[1:]
[2, 3, 4, 5]
>>> lst[:] # 两个索引都省略
[1, 2, 3, 4, 5]

要注意的是,下面两种分片并不等价:

>>> lst[1:]
[2, 3, 4, 5]
>>> lst[1:-1]
[2, 3, 4]

注意:分片操作返回的序列是从原序列复制指定的范围内的元素而生成的,在新的序列中给元素重新赋值,并不影响原序列。

我们还可以再指定一个数字来表示步长,具体看下面例子:

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

上面的例子中,从索引0开始,每2个元素就取一个元素,这个2就是我所说的步长,在之前的例子中,我们的没有提供步长,这时的步长默认就是1。

当然,步长不可以为0,步长为0将会报错。但是步长可以是负数!,这时分片从右往左提取元素:

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

上面例子中,分片从索引4的元素开始,每一步取一个元素,直到索引1(不包括该元素)。

使用负数的步长常常会使人困惑,建议如无必要,还是不要使用负数的步长。

加法

通过使用加法运算符+,我们可以进行序列的连接操作:

>>> [1,2,3] + [4,5,6]
[1, 2, 3, 4, 5, 6]
>>> 'hello' + 'world'
'helloworld'
>>> (1,2) + (3,4)
(1, 2, 3, 4)

这十分简单,不过要注意,只有在相同类型的序列之间,才可以进行相加,不然就报错:

>>> [1,2,3] + 'hello'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

乘法

我们把一个序列与整数n相乘来生成一个新的序列,这个新的序列将被重复n次:

>>> [1,2,3] * 5
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> 'hello ' * 3
'hello hello hello '

成员资格

我们把确认一个值是否在序列中,称为检查这个值在序列中的成员资格。我们可以用运算符in来实现:

>>> lst = [1, 2, 3, 4]
>>> 1 in lst
True
>>> 0 in lst
False

字符串比较特殊,我们不仅可以检查某个字符是否在一个字符串中,而且可以检查某个另一个字符串是否在该字符串中:

>>> s = 'hello world'
>>> 'w' in s
True
>>> 'world' in s
True

操作序列的函数

除了上面的序列操作外,python还提供了一些内建函数用于操作序列,下面介绍最常用的len、min、max函数。

使用len函数可以得到序列的长度,也就是序列中元素的数量:

>>> lst = [1,2,3]
>>> len(lst)
3
>>> s = 'hello'
>>> len(s)
5

min和max函数分别返回序列中的最小和最大的元素:

>>> lst = [1,2,3,4,5]
>>> min(lst)
1
>>> max('hello world')
'w'

min和max函数的参数还可以是多个参数:

>>> max(3,2,4,2,5)
5
>>> min(3,2,4,2,5)
2

这个时候相当于全部参数被收集成一个列表,再从中求出最大或最小的元素


本节到此为止,读者们好好消化,我们下期再见!

python教程(四)·序列的更多相关文章

  1. 简明python教程四-----模块

    模块基本是一个包含了所有你定义的函数和变量的文件.为了在其他程序中重用模块,模块的文件名必须以.py为扩展名. #!/usr/bin/python #Filename:using_sys.py imp ...

  2. 简明python教程 --C++程序员的视角(四):容器类型(字符串、元组、列表、字典)和参考

    数据结构简介 Python定义的类型(或对象)层次结构在概念上可以划分为四种类别:简单类型.容器类型.代码类型 和内部类型. 可以将 PyObject 类之下的所有 Python 类划分为 Pytho ...

  3. PySide——Python图形化界面入门教程(四)

    PySide——Python图形化界面入门教程(四) ——创建自己的信号槽 ——Creating Your Own Signals and Slots 翻译自:http://pythoncentral ...

  4. 《简明python教程》笔记一

    读<简明Python教程>笔记: 本书的官方网站是www.byteofpython.info  安装就不说了,网上很多,这里就记录下我在安装时的问题,首先到python官网下载,选好安装路 ...

  5. (原+转)简明 Python 教程:总结

     简明 Python 教程 说明:本文只是对<简明Python教程>的一个总结.请搜索该书查看真正的教程. 第3章 最初的步骤 1. Python是大小写敏感的. 2. 在#符号右面的内容 ...

  6. 笔记|《简明Python教程》:编程小白的第一本python入门书

    <简明Python教程>这本书是初级的Python入门教材,初级内容基本覆盖,对高级内容没有做深入纠结.适合刚接触Python的新手,行文比较简洁轻松,读起来也比较顺畅. 下面是我根据各个 ...

  7. 简明的Python教程中的几个疑惑点分析#2

    #1简明的Python教程当中第十四章Python标准库介绍中的使用sys模块 假如你没看懂sys模块这一章节,那么没关系,看下面一段代码再看简明的Python教程中的sys模块实例你将很容易看懂 代 ...

  8. python教程(零)·前言

    本教程是作者根据自己学习python的经验写下的,一来是想将经验分享给对python同样感兴趣的小白(大神请忽略),二来是想借此加深本人对python的理解,温故而知新. 学习基础 本教程面向的读者, ...

  9. 【转】简明 Python 教程

    原文网址:http://woodpecker.org.cn/abyteofpython_cn/chinese/ 简明 Python 教程Swaroop, C. H. 著沈洁元  译www.byteof ...

  10. 深度学习教程 | Seq2Seq序列模型和注意力机制

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/35 本文地址:http://www.showmeai.tech/article-det ...

随机推荐

  1. C# 日期和时间的字符串表示形式转换为其等效的DateTime(stringToDateTime)

    一. 标准的日期和时间字符串转换 将日期和时间的字符串表示形式转换为其等效的DateTime对象是开发中很常见的类型转换,我们最常使用的方式是: // 如果s为null,抛出ArgumentNullE ...

  2. CSV输入输出

    读取csv文件: import csv cf = open('D:\pywe.csv','rb') cf.readline() #读取标题行,光标移动到下一行(相当于调过标题行) for l in c ...

  3. 8086 CPU 寄存器简介

    转载:http://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html 引子 打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些 ...

  4. Mysql学习---Python操作Mysql 1231

    安装PyMysql 安装PyMysql:Py3默认自带pip3安装,Py2默认无pip命令 cmd进入PyCharm的安装目录完成安装 pip3 install pymysql 安装完成的位置:E:\ ...

  5. C指针和数组

    一.指针 指针就是地址,指针变量是用来存放地址的变量,把谁的地址存放在指针变量中,就说此指针变量指向谁. 二.数组 1.一维数组 一维数组名代表数组首元素的地址,因此 *a=a[0]; &:取 ...

  6. 沉淀,再出发:Java基础知识汇总

    沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...

  7. Oracle手工修改JOB属性

    以下由sqlplus 来执行,具体参照一下相关的文档VARIABLE jobno number;BEGINDBMS_JOB.SUBMIT(:jobno,’p_test;’SYSDATE,’SYSDAT ...

  8. The good life is one inspired by love and guided by knowledge

    The good life is one inspired by love and guided by knowledge 伯特兰·罗素Bertrand Russell18721970 I can a ...

  9. CRF++ 如何制定自己的特征模板

    工具的简单介绍 对该工具的安装及介绍我这里就不再赘述,请参考官方文档或者国内一些翻译后的中文版.也还比较清楚. 我只介绍一下crf++在命名实体识别中的一些用法,这些都建立在你了解crf++的一些最基 ...

  10. U-Mail:邮件营销如何大量获取并筛选有效地址

    工欲善其事必先利其器,在所有的邮件推广中,最基础的工作就是收集到足够多的有效邮箱地址,俗话说韩信将兵多多益善,邮箱地址越多,也就意味着潜在的转化为消费者的数量众多,但是如果大量滥竽充数的地址被搜罗进来 ...