Python基础:序列
一、概述
序列类型(Sequence Types)类似于C中的数组,它是包含一组成员的连续列表,这些成员紧邻排列,并且可以通过序号(下标偏移量)访问其中的一个或多个成员。序列类型的示意图如下所示:

Python中最核心的序列类型共有3种:字符串(str和unicode)、列表(list)和元组(tuple)。
二、操作
序列类型支持的主要操作如下:
| 操作 | 说明 |
|---|---|
| s[i] | s中第i个成员(从0开始) |
| s[i:j] | s中从i到j的切片 |
| s[i:j:k] | s中从i到j的切片,步长为k |
| s * n, n * s | s的n份(浅)拷贝的串联 |
| s + t | s与t的串联 |
| x in s | 如果x是s的成员,为True;否则,为False |
| x not in s | 如果x是s的成员,为False;否则,为True |
| enumerate(s) | 返回一个enumerate对象,该对象生成由(i, s[i])组成的元组 |
| len(s) | s的长度 |
| list(iter) | 把可迭代对象转换为列表 |
| max(s) | s中的最大值 |
| min(s) | s中的最小值 |
| reversed(s) | 返回一个迭代器,访问该迭代器得到的序列与s逆序 |
| sorted(s) | 返回一个列表,该列表是对s排序后的结果 |
| str(obj) | 把对象转换为字符串(对象的字符串表示) |
| sum(s[, start]) | s中成员与start的总和(只能用于数值列表或数值元组,字符串用''.join(s)) |
| tuple(iter) | 把可迭代对象转换为元组 |
| unicode(obj) | 把对象转换为Unicode字符串(使用默认编码) |
| zip(s1, s2, ...) | 返回一个列表:[(s1[0], s2[0], ...), (s1[1], s2[1], ...), ...] |
以上操作的示例如下:
>>> s = 'abcedf'
>>> l = [0, 1, 2, 3, 4, 5]
>>> t = tuple(l)
>>>
>>> s[0], l[0], t[0]
('a', 0, 0)
>>> s[2:5], l[2:5], t[2:5]
('ced', [2, 3, 4], (2, 3, 4))
>>> s[2:5:2], l[2:5:2], t[2:5:2]
('cd', [2, 4], (2, 4))
>>> s * 2, 2 * s
('abcedfabcedf', 'abcedfabcedf')
>>> list(s) + l
['a', 'b', 'c', 'e', 'd', 'f', 0, 1, 2, 3, 4, 5]
>>> 6 in l, 6 not in l
(False, True)
>>>
>>> for i, x in enumerate(s):
... print i, x
...
0 a
1 b
2 c
3 e
4 d
5 f
>>> len(s), len(l), len(t)
(6, 6, 6)
>>> max(s), min(s)
('f', 'a')
>>> for x in reversed(t):
... print x,
...
5 4 3 2 1 0
>>> sorted([7, 4, 8, 0, 9])
[0, 4, 7, 8, 9]
>>> str(t)
'(0, 1, 2, 3, 4, 5)'
>>> unicode(l)
u'[0, 1, 2, 3, 4, 5]'
>>> sum(t), sum(t, 5)
(15, 20)
>>> zip(s, l, t)
[('a', 0, 0), ('b', 1, 1), ('c', 2, 2), ('e', 3, 3), ('d', 4, 4), ('f', 5, 5)]
三、切片
1、[]
“[]”用于访问序列中的单个元素,如可以用s[i]访问序列s中的第i个元素,其中对i的取值范围有以下限制:
- 如果i非负,则i必须在[0, N-1]范围内,否则访问会引发越界异常
- 如果i为负,则i必须在[-N, -1]范围内,否则访问会引发越界异常
以上描述中,N=len(s)即序列的长度。
序列的 下标编号规则 参考『概述』一节中的“序列类型示意图”,实际上,对于序列s而言:
- i非负时,Python使用s[i]去访问序列
- i为负时,Python使用s[N+i]去访问序列
“[]”的操作示例如下:
>>> s = 'abcdef' # N=len(s)等于6,因此非负i的范围[0, 5],负i的范围[-6, -1]
>>>
>>> s[0] # 0非负,且0在[0, 5]范围内
'a'
>>>
>>> s[6] # 0非负,但6>5,越界异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>>
>>> s[-1] # -1为负,且-1在[-6, -1]范围内
'f'
>>>
>>> s[-7] # -7为负,但-7<-6,越界异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
2、[:]和[::]
“[:]”和“[::]”用于访问序列中的多个元素(又称切片,slice),因为在功能上“[:]”完全可以看作是“[::1]”(即步长为1)的简写,所以理解“[::]”是掌握切片操作的关键。
切片s[i:j:k]是一个子序列,它由序列s中下标在 [i, j)(左闭右开区间)范围内的一些成员构成,这些成员的下标分别为i, i+k, i+2*k, ...。
在切片操作中,i、j、k的取值有以下特点(具体细节可以参考 Python2.7.5源码 的Python-2.7.5/Objects/sliceobject.c中的PySlice_GetIndicesEx函数):
- k不能为0;省略k或k为None时,令k=1
- k为正时
- 如果省略i或i为None,则令i=0
- 如果省略j或j为None,则令j=N
- 如果i为负,则令i=i+N,此时如果i仍然为负,则令i=0;j类似
- 如果i大于等于N,则令i=N;j类似
- k为负时
- 如果省略i或i为None,则令i=N-1
- 如果省略j或j为None,则令j=-1
- 如果i为负,则令i=i+N,此时如果i仍然为负,则令i=-1;j类似
- 如果i大于等于N,则令i=N-1;j类似
特别地,经过上述计算后,如果i、j、k的最终取值满足以下情况,则切片s[i:j:k]对应的子序列为空:
- k为正,且i大于等于j
- k为负,且i小于等于j
“[:]”和“[::]”的操作示例如下:
>>> s = 'abcdef' # N=len(s)等于6
# 1. 省略k或k为None时,k=1
>>> s[0:4], s[0:4:None], s[0:4:1]
('abcd', 'abcd', 'abcd')
# 2. k为正时
>>> s[:2] # 省略i时,令i=0,因此s[:2]等价于s[0:2]
'ab'
>>> s[2:] # 省略j时,令j=N,因此s[2:]等价于s[2:6]
'cdef'
>>> s[2:-1] # j为负时,令j=-1+N,因此s[2:-1]等价于s[2:5]
'cde'
>>> s[2:-10] # j为负时,j=-10+N等于-4仍然为负,令j=0,因此s[2:-10]等价于s[2:0]
''
>>> s[10:2] # i大于N时,令i=N,因此s[10:2]等价于s[6:2]
''
# 3. k为负时
>>> s[:2:-1] # 省略i时,令i=N-1,因此s[:2:-1]等价于s[5:2:-1]
'fed'
>>> s[2::-1] # 省略j时,令j=-1,因此s[2::-1]的成员为s[2]、s[1]、s[0],但不等价于s[2:-1:-1]
'cba'
>>> s[2:-1:-1] # j为负时,令j=-1+N,因此s[2:-1:-1]等价于s[2:5:-1]
''
>>> s[2:-10:-1] # j为负时,j=-10+N等于-4仍然为负,令j=-1,因此s[2:-10:-1]等价于s[2::-1]
'cba'
>>> s[10:2:-1] # i大于N时,令i=N-1,因此s[10:2:-1]等价于s[5:2:-1]
'fed'
>>> s, s[:], s[0:6], s[::], s[0:6:None], s[0:6:1] # 序列s的各种等价表示
('abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef')
>>>
>>> s[::-1] # 序列s的逆序表示
'fedcba'
Python基础:序列的更多相关文章
- 【原】Python基础-序列
1 序列 在Python中,最基本的数据结构是序列,序列中每个元素被分配一个编号,也称为索引.第一个索引为0,第二个则是1,以此类推.序列中最后一个元素被标为-1,倒数第二个元素被标为-2,以此类推. ...
- Python基础---序列对象
一.序列简介 数据结构是通过某种方式组织在一起的元素的集合. 容器(Container)是一种Python的数据结构,基本上是包含其他对象的任意对象.序列和映射(如字典)是两类主要的容器.集合(Set ...
- Python基础:序列(列表、元组)
一.概述 列表(list)是由一个个 Python对象 组成的序列.其中,Python对象 可以是任何类型的对象,包括 Python标准类型(数值.字符串.列表.元组和字典)以及 用户自定义类型(类) ...
- Python基础:序列(字符串)
一.概述 字符串 类似于C中的字符数组(功能上更像C++中的string),它是由一个个 字符 组成的序列.与C/C++不同的是,Python中没有 字符 这个类型,而是用 长度为1的字符串 来表示字 ...
- python基础之数值类型与序列类型
Hello大家好,我是python学习者小杨同学,已经学习python有一段时间,今天将之前学习过的内容整理一番,在这与大家分享与交流,现在开始我们的python基础知识之旅吧. 数值类型与序列类型 ...
- python基础之序列类型的方法——字符串方法
python基础之序列类型的方法--字符串方法 Hello大家好,我是python学习者小杨同学,经过一段时间的沉淀(其实是偷懒不想更新),我终于想起了自己的博客账号,所以这次带来的是序列方法的后半部 ...
- python基础--数值类型和序列类型
Python中数值类型:int(整数),float(浮点数),True/False(布尔值,首字母必须大写) int:1 #任意整数 float:2.3 #小数 python赋值: a = ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- 进击的Python【第二章】:Python基础(二)
Python基础(二) 本章内容 数据类型 数据运算 列表与元组的基本操作 字典的基本操作 字符编码与转码 模块初探 练习:购物车程序 一.数据类型 Python有五个标准的数据类型: Numbers ...
- python基础之dict、set及字符
python基础之dict.set及字符串处理 本节内容 字典介绍及内置方法 集合介绍 字符串处理 1.字典介绍及内置方法 字典是python中唯一的映射类型,采用键值对(key-value)的形式存 ...
随机推荐
- Centos7 改名问题
先看这篇 深入理解Linux修改hostname http://www.cnblogs.com/kerrycode/p/3595724.html 我使用如下方法 http://www.linuxid ...
- windows7实现打印机共享的方法
windows7实现打印机共享的方法和windows xp差不多,就是在下图当中的设置: 具体方法请参照:http://jingyan.baidu.com/article/6d704a13e00a21 ...
- IIS服务器下做301永久重定向设置方法
实现方法如下: 1.新建一个站点,对应目录如E:\wwwroot\301web.该目录下只需要1个文件,即index.html或者加个404.htm.绑定要跳转的域名,如图: 2.在IIS中选中刚才我 ...
- dede教程之后台登录是自动跳出解决方法
有时也不知道什么原因,登录后台时输入全部正确点确认按钮时却会自动跳出.必须输入http://你的域名/dede/login.php才可以登录.通过尝试最终解决了问题,下面分享出来: 1.打开根目录da ...
- Oracle存储过程,以逗号分隔字符串传参的处理
Oracle存储过程,经常会遇见传入的参数是逗号分隔. 处理需要3步: 第一步,创建Type类型 第二部,创建函数 第三部,创建存储过程 代码如下: 第一步: create or replace ty ...
- glide 加载圆角图片
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABEIAAAD3CAIAAACW6Gb7AAAgAElEQVR4nOy9e1QbZf74//zO4XvOYz
- Spring3系列6 - Spring 表达式语言(Spring EL)
Spring3系列6-Spring 表达式语言(Spring EL) 本篇讲述了Spring Expression Language —— 即Spring3中功能丰富强大的表达式语言,简称SpEL.S ...
- Android开发常见问题
1. android模拟机上不能加文件提示read only file system 先:adb shell 后:mount -o remount ,rw /就行不需要附加多余的东西 就上面两行,解决 ...
- python 教程_【python 基础教程详解】
Lesson 1 准备好学习Python的环境下载的地址是:www.python.org为了大家的方便,我在校内作了copy:http://10.1.204.2/tool/compiler&I ...
- php分页类代码带分页样式效果(转)
php分页类代码,有漂亮的分页样式风格 时间:2016-03-16 09:16:03来源:网络 导读:不错的php分页类代码,将类文件与分页样式嵌入,实现php查询结果的精美分页,对研究php分页原理 ...