Python数据类型-序列sequence

 更新时间:2022年01月26日 14:31:49   作者:是梦吧,是你吧!  
这篇文章主要介绍了Python数据类型-序列sequence,在前面,我们已经对Python学习做了系统的知识梳理(Python思维导图),我们接下来把知识点分节进行细讲。这一节,我们讲解序列,需要的朋友可以参考下

1 概述

在前面,我们已经对Python学习做了系统的知识梳理(Python思维导图),我们接下来把知识点分节进行细讲。这一节,我们讲解序列。

在介绍 Python 的常用数据类型之前,我们先看看 Python 最基本的数据结构 -——序列(sequence)。序列的一个特点就是根据索引(index,即元素的位置)来获取序列中的元素,第一个索引是 0,第二 个索引是 1,以此类推。

所有序列类型都可以进行某些通用的操作,比如:

索引( indexing )
分片( sliceing )
迭代( iteration )
加( adding )
乘( multiplying )
除了上面这些,我们还可以检查某个元素是否属于序列的成员,计算序列的长度等等。
重点讲索引和切片。

2 基本操作

2.1 索引 

序列中的元素可以通过索引获取,索引从 0 开始。看看下面的例子:

>>> nums = [1, 2, 3, 4, 5] # 列表
>>> nums[0] 
1 
>>> nums[1]
2 
>>> nums[-1] # 索引 -1 表示最后一个元素 
5 
>>> s = 'abcdef' # 字符串 
>>> s[0] 
'a' 
>>> s[1] 
'b' 
>>> 
>>> a = (1, 2, 3) # 元组 
>>> a[0] 
 1 
 >>> a[1] 
 2

注意到 : -1 则代表序列的最后一个元素, -2 代表倒数第二个元素,以此类推。

2.2 切片 

索引用于获取序列中的单个元素,而分片则用于获取序列的部分元素。分片操作需要提供两个索引作为 边界,中间用冒号相隔,比如:

>>> numbers = [1, 2, 3, 4, 5, 6] 
>>> numbers[0:2] # 列表分片 
[1, 2] 
>>> numbers[2:5] 
[3, 4, 5] 
>>> s = 'hello, world' # 字符串分片 
>>> s[0:5] 
'hello' 
>>> a = (2, 4, 6, 8, 10) # 元组分片 
>>> a[2:4] 
(6, 8)

这里需要特别注意的是,分片有两个索引,第 1 个索引的元素是包含在内的,而第 2 个元素的索引 则不包含在内,也就是说,numbers[2:5] 获取的是 numbers[2], numbers[3], numbers[4],没有包括 numbers[5] 。

下面列举使用分片的一些技巧:

  • (1)访问最后几个元素
  • (2)使用步长

访问最后几个元素 :

假设需要访问序列的最后 3 个元素,我们当然可以像下面这样做:

>>> numbers = [1, 2, 3, 4, 5, 6] 
>>> numbers[3:6] 
[4, 5, 6]

有没有更简洁的方法呢?想到可以使用负数形式的索引,你可能会尝试这样做:

>>> numbers = [1, 2, 3, 4, 5, 6] 
>>> numbers[-3:-1] # 实际取出的是 numbers[-3], numbers[-2] 
[4, 5] 
>>> numbers[-3:0] # 左边索引的元素比右边索引出现得晚,返回空序列 
[]

上面的两种使用方式并不能正确获取序列的最后 3 个元素, Python 提供了一个捷径 :

(也就是说,如果希望分片包含最后一个元素,可将第 2 个索引置为空)

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8] 
>>> numbers[-3:] 
[6, 7, 8] 
>>> numbers[5:] 
[6, 7, 8]

如果要复制整个序列,可以将两个索引都置为空:

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8] 
>>> nums = numbers[:] 
>>> nums 
[1, 2, 3, 4, 5, 6, 7, 8]

使用步长 :

使用分片的时候,步长默认是 1 ,即逐个访问,我们也可以自定义步长,比如:

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8] 
>>> numbers[0:4] 
[1, 2, 3, 4] 
>>> numbers[0:4:1] # 步长为 1,不写也可以,默认为 1 
[1, 2, 3, 4] 
>>> numbers[0:4:2] # 步长为 2,取出 numbers[0], numbers[2] 
[1, 3]
>>> numbers[::3] # 等价于 numbers[0:8:3],取出索引为 0, 3, 6 的元素 
[1, 4, 7]

另外,步长也可以是负数,表示从右到左取元素:

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8] 
>>> numbers[0:4:-1] 
[] 
>>> numbers[4:0:-1] # 取出索引为 4, 3, 2, 1 的元素 
[5, 4, 3, 2] 
>>> numbers[4:0:-2] # 取出索引为 4, 2 的元素 
[5, 3] 
>>> numbers[::-1] # 从右到左取出所有元素 
[8, 7, 6, 5, 4, 3, 2, 1] 
>>> numbers[::-2] # 取出索引为 7, 5, 3, 1 的元素 
[8, 6, 4, 2] 
>>> numbers[6::-2] # 取出索引为 6, 4, 2, 0 的元素 
[7, 5, 3, 1] 
>>> numbers[:6:-2] # 取出索引为 7 的元素 
[8]

这里总结一下使用分片操作的一些方法, 分片的使用形式是 :

# 左索引:右索引:步长 
left_index:right_index:step

要牢牢记住的是 :

左边索引的元素包括在结果之中,右边索引的元素不包括在结果之中;
当使用一个负数作为步长时,必须让左边索引大于右边索引;
对正数步长,从左向右取元素;对负数步长,从右向左取元素;

2.3 加 

序列可以进行「加法」操作,如下:

>>> [1, 2, 3] + [4, 5, 6] # 「加法」效果其实就是连接在一起 
[1, 2, 3, 4, 5, 6] 
>>> (1, 2, 3) + (4, 5, 6) 
(1, 2, 3, 4, 5, 6) 
>>> 'hello, ' + 'world!'
'hello, world!' 
>>> [1, 2, 3] + 'abc' 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
TypeError: can only concatenate list (not "str") to list
#这里需要注意的是:两种相同类型的序列才能「加法」操作。

2.4 乘

序列可以进行「乘法」操作,比如: 

>>> 'abc' * 3 
'abcabcabc' 
>>> [0] * 3 
[0, 0, 0] 
>>> [1, 2, 3] * 3 
[1, 2, 3, 1, 2, 3, 1, 2, 3]

到此这篇关于Python数据类型-序列sequence的文章就介绍到这了,更多相关Python数据类型 序列sequence内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用Python实现BP神经网络(附代码)

    用Python实现BP神经网络(附代码)

    这篇文章主要介绍了用Python实现BP神经网络(附代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 关于Python 3中print函数的换行详解

    关于Python 3中print函数的换行详解

    最近在学习python3,发现了一个问题想着总结出来,所以下面这篇文章主要给大家介绍了关于Python 3中print函数换行的相关资料,文中通过示例代码介绍的非常详细,对需要的朋友们具有一定的参考学习价值,感兴趣的朋友们下面随着小编来一起学习学习吧。
    2017-08-08
  • 利用Python+PyQt5实现简易浏览器的实战记录

    利用Python+PyQt5实现简易浏览器的实战记录

    这篇文章主要给大家介绍了关于如何利用Python+PyQt5实现简易浏览器的相关资料,Qt 的主要优势是可以开发跨平台的图形界面程序,基于 Qt 的应用能够借助于各平台的原生性在不同类的设备上运行,而无须修改任何代码库,需要的朋友可以参考下
    2021-07-07
  • 浅谈Python中列表生成式和生成器的区别

    浅谈Python中列表生成式和生成器的区别

    这篇文章主要介绍了浅谈Python中列表生成式和生成器的区别,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • 10分钟用Python快速搭建全文搜索引擎详解流程

    10分钟用Python快速搭建全文搜索引擎详解流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章带你用python花10分钟迅速搭建一个好玩的Python全文搜索引擎,大家可以在过程中查缺补漏,提升水平
    2021-10-10
  • python高级搜索实现高效搜索GitHub资源

    python高级搜索实现高效搜索GitHub资源

    这篇文章主要为大家介绍了python高级搜索来高效搜索GitHub,从而高效获取所需资源,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • Python的Tornado框架的异步任务与AsyncHTTPClient

    Python的Tornado框架的异步任务与AsyncHTTPClient

    Tornado的奥义就在于异步处理来提高单线程的Python程序执行性能,这里我们就来详解Python的Tornado框架的异步任务与AsyncHTTPClient,需要的朋友可以参考下
    2016-06-06
  • Python机器学习之实现模型持久化与加载

    Python机器学习之实现模型持久化与加载

    在实际的机器学习项目中,我们通常需要将训练好的模型保存到磁盘,本文我们会介绍如何在Python中使用pickle和joblib库将训练好的模型持久化到磁盘,需要的可以参考一下
    2023-05-05
  • Python列表创建与销毁及缓存池机制

    Python列表创建与销毁及缓存池机制

    这篇文章主要介绍了Python列表创建与销毁及缓存池机制,文章基于python展开对列表创建与销毁内容的展开,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • 使用Python制作一个数据预处理小工具(多种操作一键完成)

    使用Python制作一个数据预处理小工具(多种操作一键完成)

    这篇文章主要介绍了使用Python制作一个数据预处理小工具(多种操作一键完成),本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02

最新评论