[Python笔记]序列(一)索引、分片

 

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进行初始化一个序列。

最新文章

  1. 让IE系列支持HTML5的html5shiv.js和respond.min.js
  2. 【译】ISupportInitialize的用处
  3. Ubuntu安装Tcpdump
  4. CSS 实现:checkbox
  5. 【gradle报错】error: package org.apache.http does not exist
  6. OD: DEP - Ret2Libc via VirtualProtect() &amp; VirtualAlloc()
  7. HDU 2025 查找最大元素
  8. LINQ实现行列转换
  9. 11. leetcode 283. Move Zeroes
  10. ArrayList与数组间的转换
  11. javascript 数组以及对象的深拷贝(复制数组或复制对象)的方法
  12. Qt文档阅读笔记-QGraphicsItem::paint中QStyleOptionGraphicsItem *option的进一步认识
  13. API测试:Chai &amp; Mocha
  14. oracle数据库分页总结
  15. Qt warning: 构建目录必须和源文件目录为同级目录
  16. {Python之进程} 背景知识 什么是进程 进程调度 并发与并行 同步\异步\阻塞\非阻塞 进程的创建与结束 multiprocess模块 进程池和mutiprocess.Poll
  17. body-parser 用法
  18. 自定义ThreadPoolExecutor带Queue缓冲队列的线程池 + JMeter模拟并发下单请求
  19. SQL SERVER 数据库字段简单加密解密
  20. jenkins主从从服务器发布脚本执行成功但总提示失败 FATAL: Remote call on XXXX failed

热门文章

  1. shell编程:for循环
  2. js跨域需要token。
  3. Android -- 自定义ViewGroup实现FlowLayout效果
  4. object base基类分析
  5. Metasploit渗透技巧:后渗透Meterpreter代理
  6. html5-盒子模型
  7. mysql使用navicat编写调用存储过程
  8. wingide 远程调试
  9. cvc-complex-type.3.2.2: 元素 &#39;constructor-arg&#39; 中不允许出现属性 &#39;name&#39;
  10. ETL面试题集锦