Python包含6种内建序列:列表、元组、字符串、Unicode字符串、buffer对象、xrange对象。

这些序列支持通用的操作:

  • 索引

索引是从0开始计数;当索引值为负数时,表示从最后一个元素(从右到左)开始计数。这里列举几个例子:

#字符串字面值可以直接使用索引,不需要专门的变量引用
>>> 'Hello World!'[0]
'H'
>>> 'Hello World!'[11]
'!'
#注意越界
>>> 'Hello World!'[12]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
#表示右边第一个
>>> 'Hello World!'[-1]
'!'
>>> 'Hello World!'[-11]
'e'
#注意越界
>>> 'Hello World!'[-12]
'H'
>>> 'Hello World!'[-13]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
  • 分片

分片用于截取某个范围内的元素,通过:来指定起始区间(左闭右开区间,包含左侧索引值对应的元素,但不包含右测索引值对应的元素。有几种典型的使用方法,参考举例:

#注意不包括右边索引值对应的元素
>>> num = [1,2,3,4,5,6,7,8,9,10]
>>> num[3]
4
>>> num[6]
7
>>> num[3:6]
[4, 5, 6]
#留意右边边界
>>> num[3:9]
[4, 5, 6, 7, 8, 9]
#右边越界,刚好是10对应的下一个索引值
>>> num[3:10]
[4, 5, 6, 7, 8, 9, 10]
#右边越界
>>> num[3:11]
[4, 5, 6, 7, 8, 9, 10] #注意是不包含最后一个元素的
>>> num[-3:-1]
[8, 9]
>>> num[-4:-1]
[7, 8, 9]
>>> num[-10:-1]
[1, 2, 3, 4, 5, 6, 7, 8, 9] #注意右边界
>>> num[-10:0]
[]
>>> num[-5:-1]
[6, 7, 8, 9] #注意右边界
>>> num[-5:]
[6, 7, 8, 9, 10]
>>> num[-5:1]
[]>>> num[3:1]
[]
>>> num[3:-1]
[4, 5, 6, 7, 8, 9] #取最右3个元素
>>> num[-3:]
[8, 9, 10] #取最左3个元素
>>> num[:3]
[1, 2, 3] #可以加入step length
>>> num[1:10:3]
[2, 5, 8]
>>> num[0:10:3]
[1, 4, 7, 10] #起始位置默认为最左和最右,但不包括最右的元素
>>> num[::2]
[1, 3, 5, 7, 9]
>>> num[0:9:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> num[0:10:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #如果step length为0,会报错,也就是说步长不可以为0
>>> num[1:5:0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: slice step cannot be zero #如果步长为负数,表示从右向左提取元素
#注意不包括6对应的元素
num[10:6:-1]
[10, 9, 8] #倒序输出
>>> num[10::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1] #从最左边开始
>>> num[:-3:1]
[1, 2, 3, 4, 5, 6, 7]
>>> num[:3:1]
[1, 2, 3]
#从最右边开始
>>> num[:3:-1]
[10, 9, 8, 7, 6, 5]

要点:分片包括起始索引对应的元素,但不包括终止索引对应的元素。如果索引值为负值,则表示从最右边元素开始,需避免索引越界。

  • '+'运算

表示两个序列的相连,但是仅允许相同类型的序列才能进行连接操作。举例:

#列表
>>> [1,2,3] + [3,2,1]
[1, 2, 3, 3, 2, 1]
#字符串
>>> 'Hi' + ',' + 'Baby'
'Hi,Baby'
#元组(tuple)
>>> ('This','is','a') + ('test','case')
('This', 'is', 'a', 'test', 'case')
#如果序列类型不一致,则会报错
>>> 'Hi' + [1,2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'list' objects

小结:序列支持‘+’运算,表示两个相同类型的序列的连接。

  • '*'运算

'*'运算表示生成一个元素重复多次的序列,举例:

>>> 'hi '*5
'hi hi hi hi hi '
>>> "hello" * 3
'hellohellohello'
>>> (1,2,3) * 4
(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)
>>> [1,2,3] * 4
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
#支持none
>>> [None]*10
[None, None, None, None, None, None, None, None, None, None]
#支持交换律
>>> 4 * [1,2,3]
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

乘法表示将序列重复N次以生成一个新的序列,可以用None进行初始化一个序列。

[Python笔记]序列(一)索引、分片的更多相关文章

  1. Python通用序列操作

    1.序列概览 1.数据结构 序列.容器 Python中最基本的数据结构是序列,其有索引(从左到右第一个索引为0,从右到左第一个索引为-1). Python包含6中内建的序列: 列表 元组 字符串 Un ...

  2. A Byte of Python 笔记(7)数据结构:列表、元组、字典,序列

    第9章 数据结构 数据结构,即可以处理一些数据的结构.或者说,它们是用来存储一组相关数据的. python 有三种内建的数据结构--列表.元组和字典. list = ['item1', 'item2' ...

  3. Oracle 学习笔记 12 -- 序列、索引、同义词

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/Topyuluo/article/details/24232449 数据库的对象包含:表.视图.序列. ...

  4. python笔记之列表与元组函数和方法使用举例

    在学习列表之前先了解了raw_input和input的区别:(仅适用于版本2,版本3中raw_input和input合并,没有raw_input) input的语法为:input("str& ...

  5. guxh的python笔记一:数据类型

    1,基本概念 1.1,数据类型 基本数据类型:字符串,数字,布尔等 引用数据类型:相对不可变(元组),可变(列表,字典,集合等) 基本数据类型存放实际值,引用数据类型存放对象的地址(即引用) ==:判 ...

  6. 小甲鱼Python笔记(上)

    基于Python 3.4.3 一 二 三 四  基础 print 三版必须加括号,二版不用加 alt + n :上一条语句 alt + p :下一条语句 打印三条hello 没有大括号,用缩进来表示 ...

  7. Python常见序列详解

    一.Python中序列的分类 常见序列类型包括字符串(普通字符串和unicode字符串),列表和元组.所谓序列,即成员有序排列,可通过下标访问. 二.Python序列通用操作 下面我们将分别以字符串. ...

  8. 嵩天老师的零基础Python笔记:https://www.bilibili.com/video/av13570243/?from=search&seid=15873837810484552531 中的15-23讲

    #coding=gbk#嵩天老师的零基础Python笔记:https://www.bilibili.com/video/av13570243/?from=search&seid=1587383 ...

  9. python笔记(2)--字符串

    一.字符串 字符串是不可变序列,具有序列的公共操作方法,具体操作见python笔记(1)--序列(列表 元组 range) 1.创建字符串 单引号:'Hello , I am Logan ! ' 双引 ...

随机推荐

  1. 解决weblogic.net.http.SOAPHttpsURLConnection incompatible with javax.net.ssl.HttpsURLConnection

    1. 按照网上的办法,可以修改代码解决问题,但是由于我们使用的是别人的jar包,不能修改代码,: URL url = new URL(null, "https://www.baidu.&qu ...

  2. Yii2 用户登录

    在Yii2的basic版本中默认是从一个数组验证用户名和密码,如何改为从数据表中查询验证呢?且数据库的密码要为哈希加密密码验证? 下面我们就一步一步解析Yii2的登录过程. 一. 创建user表模型 ...

  3. thinkphp设置session有效时间

    thinkphp的框架文件 ThinkPHP/Common/functions.php function session(){ 在这个方法中找到 thinkphp .1版 if(isset($name ...

  4. 【使用Unity开发Windows Phone上的2D游戏】(2)初识工具

    下载工具 我们需要下载两个工具:Unity 和 2D Toolkit Unity 在我写这篇文章的时候,最新的Unity版本是4.2.1, 下载地址 Unity公司的开发效率实在是很高,我一个多月前开 ...

  5. STM32F105解密STM32F105VB芯片解密STM32F105R8单片机破解多少钱?

    STM32F105解密STM32F105VB芯片解密STM32F105R8单片机破解 STM32F105芯片Cortex-M3单片机解密: [凯基迪科技] STM32F105R8解密 | STM32F ...

  6. three.js自定义形状

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  7. pip安装模块

    需要到pip目录下执行 pip install 模块名 pip 也需要配置环境变量,电脑是windows

  8. Codeforces Round #254 (Div. 2) A DZY Loves Chessboard

    先生成nXm的BW棋盘 BWBWBWBW WBWBWBWB BWBWBWBW WBWBWBWB 类似上面交替变换 然后将输入为’-’的地方替换成‘-’即可 #include <iostream& ...

  9. 使用 yum 安装 virtualbox 虚拟机

    我的环境是centos7,所以也可以说是在centos7下使用yum安装virtualbox,不过对于其他的LINUX发行版方法都一样. 下面的操作都是在命令行中进行的. 1.首先需要配置yum的源. ...

  10. OSG的节点访问

    OSG的节点访问 转自:http://www.cnblogs.com/kanego/archive/2011/09/27/2193484.html SG中节点的访问使用的是一种访问器模式. 一个典型的 ...