数据结构:数据结构是以某种方式(如编号)组合起来的数据元素(数字、字符以及其他数据结构)集合。在Python中,最基本的数据结构为序列(sequence).序列中每个元素都有其编号,即其位置和索引,其中第一个元素的索引为0,第二个为1,依次类推。
序列
概述:python中内置了多种类型的序列,我们使用较多的主要有列表、元组以及字符串,其中列表是可以修改的,而元组和字符串是不能进行修改的
通用的序列操作
- 索引
- 序列中所有元素都有编号,都是从0开始,字符串中的索引指向第一个元素
x=['ake', 'dkd', 123, 3, 'hdi'] x[0]->'ake'
- 序列中所有元素都有编号,都是从0开始,字符串中的索引指向第一个元素
- 索引也可以从最后一个开始,用虚数(负号)表示即可;
greeting ='Hello' greeting[0]-> 'H' greeting [-1]->'o'
- 切片
索引主要用于访问单个元素,而要访问两个及以上元素则需要用切片(slicing)来访问特定范围内的元素,即使用两个索引即可,中间用冒号分割;- [n1 : n2] 表示从索引出n1到n2范围内的元素,其中n1指定的元素时包含在切片内,而n2则不包含;需要指出的是,如果n1、n2为负数,表示反向索引,最后一个元素从-1开始计数,依次类推;
- 其他简写 如[n1:]表示索引出从n1开始之后的所有元素,也可以省略第一个元素[:n],如果两个都省略表示切片所有内容;
numbers=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] number[3:6]->[4, 5, 6] number[3:]->[4, 5, 6, 7, 8, 9, 10] number[:3]->[1, 2, 3] number[ : ]->[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- 步长:执行切片时,除了指定起点和终点外,还有一个参数,即步长,默认为1(可省略),意味从一个元素移动到下一个元素,也可自定义为其他步长,如2表示从起点到终点每隔一个元素提取一个元素,步长不能为0,否则移不动,但可以为负数,表明反方向移动。
number [0:10:1]->[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] number [0:10:2]->[1, 3, 5, 7, 9] number [8: 3: -1]->[9, 8, 7, 6, 5] number [::-2]->[10, 8, 6, 4, 2]
- 相加
与字符串拼接类似,用加法进行运算,但拼接时 只能拼接相同类型的,即只能列表与列表、字符串与字符串、元组和元组拼接,而不能列表与字符串或元组进行拼接
[1, 2, 3] + [4, 5, 6] ->[1, 2, 3, 4, 5, 6] 'Hello,' +'world!'->'Hello, world!'
- 相乘
将序列与数x相乘,将重复这个序列x次来创建一个新序列
'python'*5->'pythonpythonpythonpythonpython' [12]*5->[12, 12, 12, 12, 12]
如果要创建一个没有任何返回值的序列,应该用None表示,而不是0 - 成员资格检查
要检查特定的值是否包含在序列中,可使用in运算符,它检查是否满足指定条件,并返回相应的值:满足时返回True,不满足是返回False。这种运算符称为布尔运算符,返回的值称为布尔值。(注意True和False的正确写法)
permission='rw' 'r' in permission->True 'x' in permission->False
- 序列长度、最大及最小元素等
- 长度:len
- 最大值:max
- 最小值:min
numbers=[100, 34, 678] len(numbers)->3 max(numbers)->678 min(numbers)->34
- 迭代(后面介绍,此处不展开)
列表:Python的主力
一、创建列表 (函数list)
list ('hello')->['h', 'e', 'l', 'l', 'o'] list('1234')->[1, 2, 3, 4]
不能输入list(1,2,3,4),会提示输入参数过多,只能输入1个参数
二、列表基本操作
- 修改列表:给元素赋值(不能给不存在的元素赋值)
x=[1, 1, 1] x[1]=[2] x->[1, 2, 1]
- 删除元素 (del)
del 变量名[num]
names= ['Alice', 'Beth', 'Cecil', 'Dee-Dee', 'Earl'] del names[1] names->['Alice', 'Cecil', 'Dee-Dee', 'Earl']
注意都不会自动有返回值,需要重新输入变量查看。 - 给切片赋值
切片是一项极其强大的功能,而能够给切片赋值让这项功能更加强大,其本质也是修改列表
切片赋值可以删除一个或多个元素,也可以替换或插入多个元素到列表中,使修改列表更加灵活
numbers=[1, 5] numbers[1:1]=[2, 3, 4] numbers->[1, 2, 3, 4, 5] numbers[1: 4]=[ ] numbers->[1, 5]
三、其他列表方法
(目前感觉使用做多的几个方法主要是append、count、sort)
- append:将一个对象附加到列表末尾
lst=[1, 2, 3] lst.append(4) lst ->[1, 2, 3, 4]
- clear:就地清空列表
lst=[1,2,3] lst.clear( ) lst->[]
- copy:复制列表,除了用copy函数外还可以用切片赋值a[:]或list(a)
a=[1, 2, 3] b=a.copy( ) b->[1, 2, 3]
- count:计算指定元素在列表出现的次数
[[1,2], 1, 1, [2, 1, [1, 2]]].count(1)->2
- extend:能够同时将多个附加值添加到列表末尾(append只能添加一个)
a=[1, 2, 3] b=[4, 5, 6] a.extend(b) a->[1, 2, 3, 4, 5, 6]
- index:在列表中查找指定值第一次出现的索引,当查找的元素不存在列表中时会报错提示不在列表中。
knights=['we', 'are', 'the', 'knights', 'who', 'say', 'ni'] knights.index('who')->4
- insert:用于将一个对象插入到列表中
numbers=[1, 2, 3, 5, 6, 7] numbers.insert(3, 'four') numbers->[1, 2, 3, 'four', 5, 6, 7]
- pop:用于从列表中删除一个元素,默认为最后一个元素,并返回这个元素(pop是唯一既修改又返回一个非None值的列表方法)
x=[1, 2, 3] x.pop( )->3 x->[1,2] x.pop(0)->1
- remove:用于删除第一个指定值元素
x=['to', 'be', 'or', 'not' , 'to', 'be'] x.remove('be') x-> ['to', 'or', 'not', 'to', 'be']
- reverse:按相反的顺序排列列表中的元素
x=[1, 2, 3] x.reverse( ) x->[3, 2, 1]
- sort:用于列表就地排序,即对原列表进行修改,使其元素按顺序排列,而不是返回排序后的列表副本。
x=[4, 6, 2, 1, 7, 9] x.sort( ) x->[1, 2, 4, 6, 7, 9]
- 由于sort没有任何返回值,所以如何y=x.sort( )会出现报错,如果硬要将sort的结果给y,则需要用到sorted函数,即y=sorted(x)
- sort还有两关键字个参数key和reverse
- 参数key类似于参数cmp.然而不会直接使用这个函数来判断一个元素是否比另一个元素小,而是使用它来为每一个元素创建一个键,再根据这些键对元素排序,如要对列表根据元素长度排序,则需要用到函数len
x=['aardvark', 'abalone', 'acme', 'add', 'aerate'] x.sort(key=len) x->('add', 'acme', 'aerate', 'abalone', 'aardvark']
- 参数key类似于参数cmp.然而不会直接使用这个函数来判断一个元素是否比另一个元素小,而是使用它来为每一个元素创建一个键,再根据这些键对元素排序,如要对列表根据元素长度排序,则需要用到函数len
- 关键字函数reverse,只需将其指定为一个真值(True或False),以指出是否要按照相反的顺序对列表排序。
x=[4, 6, 2, 1, 7,9] x. sort(reverse=True) x->[9, 7, 6, 4, 2, 1]
元组(tuple):不可修改的序列
元组语法非常简单,只需将一些值用逗号隔开,就能自动创建元组,外面为括号,不是中括号
1, 2, 3->(1, 2, 3) 42,->(42,) ( )空元组 42->42不是元组
**总结: **
序列中通用方法均有返回值:len/max/min/in
列表中有返回值的方法:pop/count/index
没有返回值的函数:append/del/clear/copy/extend/reverse/sort