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. Tcl

    Tcl(发音 tickle)是一种脚本语言.由John Ousterhout创建.TCL经常被用于快速原型开发 RAD.脚本编程.GUI编程和测试等方面. Expect Expect是 另外一种非常流 ...

  2. js脚本语言

    alert(): 输出 字符串 转成整数 parseint(字符串):运算符与表达式% 取余 aler(10%2)余0 逻辑运算符&&并 ||或 !非 判断条件比较运算符== 等于 ! ...

  3. css笔记1: html页面的CSS、DIV命名规则

    原地址:http://www.cnblogs.com/rising-fay/archive/2013/02/25/2932592.html CSS命名规则 头:header 内容:content/co ...

  4. 会话控制:Cookie和session

    HTTP(超文本传输协议)定义了通过万维网(WWW)传输文本.图形.视频和所有其他数据所有的规则.HTTP是一种无状态的协议,说明每次请求的处理都与之前或之后的请求无关.虽然这种简化实现对于HTTP的 ...

  5. Codeforces Round #367 (Div. 2)

    A题 Beru-taxi 随便搞搞.. #include <cstdio> #include <cmath> using namespace std; int a,b,n; s ...

  6. 08 Servlet

    Servlet技术          * Servlet开发动态的Web资源的技术.                       * Servlet技术               * 在javax. ...

  7. Java动态、重写 理解

    相关类: class A ...{ public String show(D obj)...{ return ("A and D"); } public String show(A ...

  8. NOIP200806 火柴棒等式【B005】

    [B005]火柴棒等式[难度B]———————————————————————————————————————————————————————————— [题目要求] 给你n根火柴棍,你可以拼出多少个 ...

  9. windows 2008 server NTP Server

    1. 选择一台服务器作为时间同步服务器. 2. 运行Regedit,打开注册表编辑器. 3. 找到注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Ser ...

  10. php+mysql+smarty+oop

    php+mysql+smarty+oop 设计新闻系统简单的UML模 powerdesigner和diagram designer 设计所需环境.模块.模板样式 数据库uml设计和创建数据库结构 db ...