Python学习笔记-通用序列操作

一、索引
Python中序列的所有元素都是有编号的,从0开始递增。
例如:

#字符串就是由字符组成的序列
>>> test = 'NiceDay'
>>> test[0]
'N'

>>> test[10]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

>>> test[-7]
'N'

使用负数索引时,Python会从右边,也就是从最后一个元素开始计数。
最后一个元素的位置编号是-1。

字符串的字面值可以直接使用索引:

>>> 'Test'[2]
's'

如果一个函数调用返回一个序列,可以直接对返回结果进行索引操作:

#test取raw_input的首字符
>>> test = raw_input('test: ')[0]
test: are you ok
>>> test
'a'

二、分片
分片主要用于获取一定范围内的元素,使用方式如下:

>>> tag = 'today is a nice day'
>>> tag[2:6]
'day '
>>> tag[10:-1]
' nice da'

容易看出分片操作需要提供两个索引作为边界,
第1个索引的元素是包含在分片内的,而第2个则不包含在分片内。

需要注意的是:
只要分片最左边的索引比它右边的晚出现在序列中,
结果就是一个空序列。
例如:

>>> numbers = [1, 2, 3, 4]
>>> numbers[3:1]
[]

#此时顺序为0, -1, -2, -3
#-3仍出现的晚
>>> numbers[-3:0]
[]

2.1 索引为空的情况
当后一个索引为空时,将得到前一个索引之后所有的元素:

>>> num = [1,2,3,4]
>>> num[2:]
[3, 4]

当前一个索引为空时,将得到后一个索引之前所有的元素(不包括该索引):

>>> num = [1,2,3,4]
>>> num[:2]
[1, 2]

当两个索引均为空时,将得到整个序列:

>>> num = [1,2,3,4]
>>> num[:]
[1, 2, 3, 4]

2.2 指定步长的情况
进行分片的时候,分片的开始和结束点需要进行指定(直接指定或间接制定)。
除了这两个参数外,分片还有一个隐式参数—步长(默认为1)。
分片操作就是按照步长逐个遍历序列中的元素,
然后返回开始和结束点之间的所有元素。

>>> num = [1,2,3,4,5,6,7]
#第2个冒号后就是步长
>>> num[1:6:2]
[2, 4, 6]

# 不长不能为0
>>> num[1:6:0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: slice step cannot be zero

#步长可以为负数,表示从右往左提取元素
>>> num[6:2:-1]
[7, 6, 5, 4]

#使用步长时,也可以省略开始、结束节点
#正步长时,从头到尾取数
#负步长时,从尾到头取数
>>> num[::-1]
[7, 6, 5, 4, 3, 2, 1]
>>> num[::]
[1, 2, 3, 4, 5, 6, 7]

最后总结一下分片的特点:
开始点的元素包括在结果之中,而结束点的元素不在结果中。
当使用正数为步长时,必须让开始点小于结束点;
当使用负数为步长时,必须让开始点大于结束点。

三、序列相加

>>> a = [1,2,3]
>>> b = ['1', '2', '3']
>>> a + b
[1, 2, 3, '1', '2', '3']
>>> c = '123'
>>> a + c
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

在python中,相同类型的序列才能相加。

四、序列的乘法
当一个序列乘以数字N时,将得到一个新的序列。
在新的序列中,原来的序列将被重复N次。

>>> test = 'yes'
>>> test * 10
'yesyesyesyesyesyesyesyesyesyes'

#用于生成长度为10的空列表
>>> empty = [None] * 10
>>> empty
[None, None, None, None, None, None, None, None, None, None]

五、成员检测
为了检测一个值是否在序列中,可以使用in运算符。
如果该值存在与序列中,则返回true;否则返回false。

>>> test = 'abc'
>>> 'bc' in test
True

序列使用in运算符时,是以自己的元素为最小匹配单位的:

>>> revenge = [['ironman', '1'], ['captain', '2']]
>>> ['ironman', '1'] in revenge
True
>>> 'ironman' in revenge
False

六、长度、最小值和最大值
内建函数len可以求出序列包含元素的数量:

>>> test = '123'
>>> len(test)
3

内建函数min和max分别返回序列中最小和最大的元素:

>>> num = [1,3,4,6]
>>> min(num)
1
>>> max(num)
6

#实际比较的是对应的编码
>>> min('sabex')
'a'
>>> max('!sie2x')
'x'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值