Python 第二章 列表和元组(2) 通用序列操作

所有序列类型都可以进行某些特定的操作。

这些操作包括:索引、分片、加、乘以、检查成员资格、计算序列长度、找出最大元素和最小元素。

 

索引

序列中的所有元素都是有编号的——从0开始递增。这些元素可以通过编号分别访问。

>>> word = 'hello'
>>> word[0]
'h'
>>> word[1]
'e'

注意:这里字符串就是一个由字符串组成的序列。索引0指向第1个元素,在这个例子中就是字符h。

>>> word[-1]
'o'

索引的值也可以为负。最后1个元素的位置编号是-1.

 

这就是索引,可以通过元素的位置直接获取元素。

 

分片

分片操作用来访问一定范围内的元素。

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> numbers[3:6]
[4, 5, 6]
>>> numbers[0:1]
[1]

>>> numbers[2:1]
[]

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


在这个例子中将numbers[a:b]中a看成左边界,b看成右边界。a边界包含在分片内,b边界不包含在分片内,而a和b之间都包含在分片内。

若用数学的区间来理解更方便一些即分片区间是[a, b). a值、a与b两点之间的整数值都是分片内的值。

 

>>> numbers[7:10]
[8, 9, 10]

注意:索引10指向的是第11个元素——这个元素并不存在,但这个索引却在numbers这个列表的最后一个元素之后。

这是为了让分片部分能够包含列表的最后一个元素,所以必须提供最后一个元素的下一个元素对应的索引作为边界。

1, 2, 3, 4, 5, 6 , 7, 8, 9, 10

↑      ↑       ↑      ↑      ↑      ↑        ↑      ↑       ↑       ↑     ↑       

0      1      2      3      4     5        6      7      8       9    10 

 

 

边界为负值的情况:

>>> numbers[-3: -1]
[8, 9]

我们知道索引-1已经是指向列表的最后一个元素了。那么分片的负数情况访问最后的元素呢?

>>> numbers[-3 : 0]
[]

这不是我们想要的结果。 幸好有个捷径,就是置空最后一个索引即可:

>>> numbers[-3:]
[8, 9, 10]

再看看置空前面的索引

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

置空两边的索引

>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

 

分片更大的步长

进行分片的时候,除了分片的开始和结束点两个参数之后,还有一个参数——步长。这个参数通常都是隐使设置的,在默认情况下,分片的步长是1.

分片操作就是按照这个步长逐个遍历序列的元素,然后返回开始和结束点之间的满足步长的元素。

>>> numbers[0:10:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> numbers[0:10:2]
[1, 3, 5, 7, 9]

>>> numbers[::3]
[1, 4, 7, 10]

>>> numbers[::4]
[1, 5, 9]

步长为1,分片中的每个元素都被现实。

步长为2,分片中的从开始到结束每隔1个元素显示1个元素。

......

 

注意: 步长不能为0

 

步长为负数的情况(即从右到左提取元素):

>>> numbers[8:3:-1]
[9, 8, 7, 6, 5]

>>> numbers[10:0:-2]
[10, 8, 6, 4, 2]

>>> numbers[::-2]
[10, 8, 6, 4, 2]

>>> numbers[0:10:-2]
[]

>>> numbers[5::-2]
[6, 4, 2]
>>> numbers[:5:-2]
[10, 8]

 

当使用一个负数作为步长的时候,必须让开始索引大于结束索引。

在没有明确指定开始索引和结束索引的时候,正数步长会从序列的头部开始向右提取元素,直到最后一个元素;负数步长,则从序列的尾部开始向左提取元素,直到第一个元素。

 

 

通过加号可以进行序列的连接操作:

>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> 'Hello ' + 'world!'
'Hello world!'
>>> [1, 2, 3] + 'Hello '

Traceback (most recent call last):
  File "<pyshell#33>", line 1, in <module>
    [1, 2, 3] + 'Hello '
TypeError: can only concatenate list (not "str") to list

注意:列表和字符串是无法连接在一起的,尽管它们都是序列。

简单来说,两种相同类型的序列才能进行连接操作。

 

>>> 'Python' * 5
'PythonPythonPythonPythonPython'
>>> [42] *10
[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]
>>> [None] * 5
[None, None, None, None, None]

用一个数字x乘以一个序列会生成新的序列,这个新序列原来序列重复x次来的。

 

注意:None是Pyhon的一个内建值,含义是“这里什么也没有”。一般用来初始化。

如果想创建一个占用五个元素空间,却不包括任何内容的列表。就用None。

 


成员资格

用in运算符来检查仪个值是否在序列中。in是个布尔运算符,是对一个条件的判断。若条件为真,则返回True; 若条件为假,则返回False.

>>> permissions = 'rw'
>>> 'w' in permissions
True
>>> 'x' in permissions
False


>>> users = ['louis', 'tom', 'bob']
>>> raw_input('Enter you name: ') in users
Enter you name: louis
True
>>> raw_input('Enter you name: ') in users
Enter you name: Luke
False


长度、最小值和最大值

内建函数len、min和max常常用到。

len函数返回序列中元素的数量

min函数返回序列中最小的元素的值

max函数返回序列中最大的元素的值

>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> len(numbers)
10
>>> min(numbers)
1
>>> max(numbers)
10

这里min和max函数的参数是一个序列


>>> max(1, 22, 33, 42)
42
>>> min(0, 4, -1)
-1
注意: max min函数的参数并不是以个序列,而是多个数字直接作为参数。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值