一、数据结构的概念:
数据结构是以某种方式(如通过编号)组合起来的数据元素(如数字、字符乃至其他数据结构)集合。
在Python中,最基本的数据结构为序列(sequence)。序列中的每个元素都有编号,即其位置或索引,其中第一个元素的索引为0,第二个元素的索引为1,依次类推。
在有些编程语言中,从1开始给序列中的元素编号,但从0开始指出相对于序列开头的偏移量。
Python内置了多种序列,其中最常用的是列表和元组,还有一种重要的序列是字符串。
列表和元组的主要不同在于:列表是可以修改的,而元组不可以。
Python支持一种数据结构的基本概念叫容器(container)。两种主要的容器是序列(如列表和元组)和映射(如字典)。在序列中,每个元素都有编号(叫索引),而在映射中,每个元素有都名称(也叫键)。
二、通用的序列操作:
通用的序列操作包括:索引、切片、相加、相乘和成员资格检查。
1、索引:
序列中的所有元素都有编号——从0开始递增,这称为索引。
可使用索引来获取元素,这种索引方式适用于所有序列。如:
greeting="Hello"
greeting[0]
代码的输出结果是:“H”。
字符串是由字符组成的序列。索引0指向第一个元素,这里为字母“H”。
当使用负数索引时,Python将从右(即从最后一个元素)开始往左数,因此 -1是最后一个元素的位置。如:
greeting="Hello"
greeting[-1]
代码的输出结果是:“o”。
2、切片:
切片(slicing)适用于提取序列的一部分,可使用两个索引,并用冒号(:)分隔,所提取的部分是从第一个索引开始(包含) 到第二个索引结束(不包含)。如:
link="http://www.python.org"
link[12:18]
代码的输出结果为:“python”。
还可以用以下代码实现以上的结果:
link="http://www.python.org"
link[12:-4]
2.1、简写:
如果切片结束于序列的末尾(包含最后一个元素),则可省略第二个索引。如:
numbers=[1,2,3,4,5,6,7,8,9,10]
numvers[-3:]
输出结果为:[8,9,10]。
同样,如果切片开始于序列的开头,可省略第一个索引。如:
numbers=[1,2,3,4,5,6,7,8,9,10]
numvers[:3]
输出结果为:[1,2,3]。
2.2、步长:
在执行切片操作时,显式或隐式的指定起点和终点,通常省略了另一个参数:步长。因为切片的默认步长为1,这意味着从序列的一个元素移到下一个元素。
显式指定步长的方法:
numbers=[1,2,3,4,5,6,7,8,9,10]
numvers[0:10:1]
输出结果为:[1,2,3,4,5,6,7,8,9,10]。
在这里,索引10指的是第11个元素,它并不存在,但确实是到达最后一个元素后再前进一步所处的位置。
显式指定步长时,还可以用简写的方法:
numbers=[1,2,3,4,5,6,7,8,9,10]
numvers[::4]
输出结果为:[1,5,9]。
步长不能为0,否则无法向前移动,但可以为负数,即从右向左提取元素,如:
numbers=[1,2,3,4,5,6,7,8,9,10]
numvers[10:0:-2]
输出结果为:[10,8,6,4,2]。
3、相加:
可使用 加法运算符(+) 来拼接序列。如:
[1,2,3]+[4,5,6]
输出结果为:[1,2,3,4,5,6]。
"Hello,"+"world!"
输出结果为:“Hello,wrold!”。
但是,不能用加法运算符来拼接不同类型的序列。如:[1,2,3]+"world!"
,这样将会出错。
4、乘法:
将序列与数x相乘,将重复这个序列x次来创建一个新的序列。如:
[12]*5
输出结果为:[12,12,12,12,12]。
"python "*5
输出结果为:"python python python python python "。
空列表 是使用不包含任何内容的两个方括号([ ])来表示。
在有些情况下,可能要创建一个指定长度但又不包含任何内容的列表,这时可以使用 None 来表示。在Python中,None表示什么都没有的意思。例如要创建一个长度初始化为10的空列表,可用如下方法:
sequence=[None]*10
sequence
代码的输出结果为:[None,None,None,None,None,None,None,None,None]。
5、成员资格:
要检查特定的值是否包含在序列中,可使用运算符 in 。它检查是否满足指定的条件,并返回相应的值:满足时返回True,不满足时返回Flase。这样的运算符称为 布尔运算符,而返回的值称为 布尔值(True或False)。
book="python"
"y" in book
代码的返回结果为:True。