Python数据结构-序列操作


Python包含6种内建序列,即列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。本章重点讨论最常用的两种,即列表和元组。

通用序列操作

Python中所有序列都可以进行一些特定操作,包括索引(indexing)、分片(slicing)、序列相加(adding)、乘法(multiplying)、成员资格、长度、最小值和最大值。

一、索引

序列中的所有元素都有编号,也就是索引。索引从0开始递增,0指向第一个元素。也可以用负数进行索引,-1指向倒数第一个元素。

>>> string = '你好,我是左老师'
>>> string[0]
'你'
>>> string[1]
'好'
>>> string[-1]
'师'
>>> 

获取用户输入时,也可以用到索引。比如,你只想获取用户输入的第四位。

>>> x = input()[3]
abcdef
>>> x
'd'
>>> 

二、切片

索引用于访问单个元素,切片可以访问指定范围内的元素。需要使用两个索引来表示范围,用冒号分割。

第一个索引是包含的第一个元素的编号,第二个索引是切片后余下的第一个元素的编号

1、正序切片
>>> date = '2021-12-06'
>>> year = date[0:4]
>>> year
'2021'
2、倒序切片

由于右侧索引所在元素并不在切片范围内,当使用负数索引定位序列末尾元素时,会发现永远无法获取最后一个元素。所以我们可以省略第二个索引,代表索引1及其之后的元素。

>>> date = '2021-12-06'
>>> day = date[-2:-1]
>>> day
'0'
>>> day = date[-2:]
>>> day
'06'
3、省略索引
>>> date = '2021-12-06'
>>> y_m = date[:7]
>>> y_m
'2021-12'
>>> y_m_d = date[:]
>>> y_m_d
'2021-12-06'
>>> 
4、切片步长

[索引1:索引2:步长]

#步长默认为1

(1)步长为正数时,从左往右提取元素
>>> num = [0,1,2,3,4,5,6,7,8,9]
>>> odd = num[1::2]
>>> odd
[1, 3, 5, 7, 9]
>>> even = num[::2]
>>> even
[0, 2, 4, 6, 8]
(2)步长为负数时,从右往左提取元素
>>> num = 'abcde'
>>> i = num[::-1]
>>> i
'edcba'

三、序列相加

注意不能拼接不同类型的序列

>>> str1 = '你'
>>> str2 = '今天'
>>> str3 = '吃饭了吗?'
>>> str = str1 + str2 + str3
>>> str
'你今天吃饭了吗?'

四、乘法

运算符:*

当序列与乘数x相乘时,将会重复这个序列x此来创建一个新序列

>>> '今天天气好晴朗'*5
'今天天气好晴朗今天天气好晴朗今天天气好晴朗今天天气好晴朗今天天气好晴朗'
>>> [None]*10
[None, None, None, None, None, None, None, None, None, None]

五、成员资格

检查特定的值是否包含在序列中,可使用运算符:in

它会检查是否满足指定条件,并返回布尔值:True或False

>>> list = [1,12,123,1234]
>>> 1234 in list
True
>>> list = [1,2,33]
>>> 3 in list
False
>>> list = [[1,2,33],1,2,33]
>>> [1,2,33] in list
True
>>>