一.序列简介

  • 数据结构是通过某种方式组织在一起的元素的集合。
  • 容器(Container)是一种Python的数据结构,基本上是包含其他对象的任意对象。序列和映射(如字典)是两类主要的容器。集合(Set)也是容器类型。
  • 序列是最基本的数据结构,是通过对数据元素进行编号将它们组织在一起的数据元素的集合。
  • 成员是有序排列的,可以通过小标偏移量访问到它的一个或者几个成员,这类python类型统称为序列.
  • Python有6中种内建的序列:列表、元组、字符串、Unicode字符串、buffer对象、xrange对象。

 官方文档:

翻译:
一个可迭代对象,它支持通过__getitem__()特殊方法使用整数索引高效地访问元素,并定义了一个__len__()方法,该方法返回序列的长度。一些内置的序列类型是list、str、tuple和bytes。注意,dict也支持__getitem__()和__len__(),但它被认为是一个映射,而不是一个序列,因为查找使用任意不可变键,而不是整数。

collections.abc.Sequence抽象基类定义了一个比__getitem__()和__len__()更丰富的接口,增加了count(),index(),__contains__(),和__reversed__()。可以使用register()显式注册实现此扩展接口的类型。

二.序列的分类

 注:

  • 容器序列和扁平序列的区别在于,扁平序列里面的元素类型都是一样的
  • array模块是python中实现的一种高效的数组存储类型。它和list相似,但是所有的数组成员必须是同一种类型,在创建数组的时候,就确定了数组的类型
  • deque类是python标准库collections模块中的一项,它提供了两端都可以操作的序列,这意味着,在序列的前后你都可以执行添加或删除操作。

三. 通用序列操作

1.索引(Indexing)

•  序列中的每个元素被分配一个序号,即元素的位置,称为索引。以正数第一个元素的索引为0,正数第二个元素的索引为1,倒数第一个元素的索引为-1,以此类推。

2.分片(Slicing)

•   分片使用2个冒号分隔的3个数字来完成:[srart:end:step]

•   第一个数字表示切片开始位置(默认为0),第二个数字表示切片截止(但不包含)位置(默认为列表长度),第三个数字表示切片的步长(默认为1)

•   可以使用切片来截取列表中的任何部分,得到一个新列表,也可以通过切片来修改和删除列表中部分元素,甚至可以通过切片操作为列表对象增加元素。

•   与使用下标访问列表元素的方法不同,切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表,代码具有更强的健壮性。

•   step为正时,Python会从序列头部开始向右提取元素,直到最后一个元素, start索引的元素应在end索引的元素左边,否则将返回一个空序列;step为负时, Python会从序列尾部开始向左提取元素,直到第一个元素,这时start索引的元素应在end索引的元素右边,否则将返回一个空序列。step不能为0。

•   当step省略时可以省略最后一个冒号或置空最后一个索引

[start:end]或[start:end:]

•   当start或end省略时要置空对应索引

[start:]或[:end]或[:]

•切片可以返回列表的浅拷贝a[:]==a

• a[:]将得到包含a所有元素的分片,是一种很有效率的复制整个列表的方法

3.加(Adding)

•   序列连接操作,只有相同类型的序列才能进行连接操作

•   实质上是创建了一个新序列并将原序列中的元素和新元素依次复制到新序列的内存空间

4.乘(Multiplying)

•   序列重复操作,用数字x乘以一个序列会产生新的序列,新的序列是原序列的重复

5.成员资格

• 使用in运算符(布尔运算符)检查一个元素是否在序列中,返回布尔值True或False

>>>  in [,,]

True

>>> [] in [,,]

False

>>>‘P’in ‘PYTHON’

True

6.内建函数

•   len():返回序列中的元素个数

•   max()、 min():返回序列中的最大或最小元素

7.迭代(iteration)

8.赋值、浅拷贝与深拷贝

①直接赋值:其实就是对象的引用(别名)。

b = a: 赋值引用,a 和 b 都指向同一个对象。

②浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。

b =a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。

如果原地修改子对象,父对象也会改变。

③深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。

Python基础---序列对象的更多相关文章

  1. python基础——获取对象信息

    python基础——获取对象信息 当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type( ...

  2. 2015/8/28 Python基础(2):对象

    Python用对象模型来存储数据.构造任何类型的值都是一个对象.Python对象都有是三个特性:身份,类型和值 身份是每个对象的唯一身份标识.任何对象都可以用内建函数id()来得到身份.如: > ...

  3. 【原】Python基础-序列

    1 序列 在Python中,最基本的数据结构是序列,序列中每个元素被分配一个编号,也称为索引.第一个索引为0,第二个则是1,以此类推.序列中最后一个元素被标为-1,倒数第二个元素被标为-2,以此类推. ...

  4. python基础===文件对象的访问模式,以及计数循环的使用方法

    案例一: 一个几M的文本文件,需要每隔100行写到新的文件中. 代码实现如下: with open(r'f:\book.txt','rb') as f1: with open(r'f:\book2.t ...

  5. python基础之对象之间的交互

    面对对象编程之对象之间的交互 这是一个猫狗大战的例子 # 猫类 class Cat: def __init__(self, name, hp, attack): self.name = name # ...

  6. Python基础:序列(列表、元组)

    一.概述 列表(list)是由一个个 Python对象 组成的序列.其中,Python对象 可以是任何类型的对象,包括 Python标准类型(数值.字符串.列表.元组和字典)以及 用户自定义类型(类) ...

  7. Python基础:序列(字符串)

    一.概述 字符串 类似于C中的字符数组(功能上更像C++中的string),它是由一个个 字符 组成的序列.与C/C++不同的是,Python中没有 字符 这个类型,而是用 长度为1的字符串 来表示字 ...

  8. 第4章 基础知识进阶 第4.1节 Python基础概念之迭代、可迭代对象、迭代器

    第四章 基础知识进阶第十七节 迭代.可迭代对象.迭代器 一.    引言 本来计划讲完元组和字典后就讲列表解析和字典解析,但要理解列表解析和字典解析,就需要掌握Python的高级的类型迭代器,因此本节 ...

  9. Python基础(2)--对象类型

    Python使用对象模型来存储数据.构造任何类型的值都是一个对象 所有的Python对象都拥有三个特性:身份.类型.值 身份: 每一个对象都有一个唯一的身份来标志自己,任何对象的身份可以使用内建函数i ...

随机推荐

  1. iOS开发系列-iOS适配

    概述 发布iPhone X 系统版本为iOS11, 由于刘海屏原因需要对新的机型做适配. iPhone X safeArea iOS11苹果提出safeArea替代iOS7引入 topLayoutGu ...

  2. 随笔记录 grub引导故障修复 2019.8.7

    系统备份: [root@localhost ~]# mkdir /abc [root@localhost ~]# mount /dev/sdb1 /abc [root@localhost ~]# dd ...

  3. log4j.rootLogger

    log4j.rootLogger=INFO, FILE, CONSOLE log4j.rootLogger=TRACE, FILE, CONSOLE

  4. Twain协议部分翻译

    转载:https://blog.csdn.net/a848691591/article/details/41006807 4.1 性能 应用程序与源进行性能协商的能力使人们能够控制TWAIN兼容的程序 ...

  5. The linux command 之定制提示符

    一.提示符分解 默认提示符如下所示: [me@linuxbox ~]$ 可以看出它包括我们的用户名.主机名.当前工作目录.提示符是由PS1变量定义的. [me@linuxbox ~]$ echo $P ...

  6. vagrant virtualbox 导入已导出的包和导出笔记

    导入 安装好virtualbox,vagrant软件之后, 将预先打包的 box 镜像导入到 vagrant 中 命令格式 vagrant box add <name> <boxpa ...

  7. Yii2 在php 7.2环境下运行,提示 Cannot use ‘Object’ as class name

    出错原因是: Object是php7.2中的保留类名,不可以使用Object作为类的名称. The object name was previously soft-reserved in PHP 7. ...

  8. JAVA数据结构之红-黑树

    本篇博客我会重点介绍对红-黑树的理解,重点介绍红-黑树的查找,这里我们将要讨论的算法称为自顶向下插入,也就是把沿着树向下查找插入点 Ⅰ.平衡树和非平衡树 平衡树和非平衡树:当插入一组数据关键字是按照升 ...

  9. openwrt_ipsec_function.sh 分析

    #!/bin/sh # # Copyright (C) Vitaly Protsko <villy@sft.ru> errno= # get_fieldval gate src " ...

  10. Android App上架流程

    想要把APP上架到应用市场都要先注册开发者账号才可以.这里的方法包括注册帐号和后期上架及一些需要注意的问题.注意:首次提交应用绝对不能随便删除,否则后面再提交会显示应用APP冲突,会要求走应用认领流程 ...