对于这两个概念我个人自学完的感觉就是C语言里的数组和被锁死的数组。哈哈,这是我个人观点!当然,这里的数组中的元素不只是数,而是元素。所以python把他换了名字:列表和元组,但是理解起来有c基础的同学可以假想他是一个抽象数组,就容易理解多了。
言归正传,这一更,我们走进列表和元组!
2.1序列概述
2.2通用的序列操作
2.3列表:python的主力将领
2.4元组:莫得感情的列表(莫挨老子)
先说一下python的序列吧,python有很多序列,这一章只是介绍最常见的两种:列表元组。还有一种重要的叫字符串,这个我们之后会详细介绍.
一般我们在处理系列值时序列很有用,比如某某某的信息数据。
>>>anchen = ['sun','18','180']
>>>dudo = ['dodo','20','169']
就像这样,我们可以利用列表来存储一系列信息,姓名,年龄,身高等等
甚至序列还可以存放其他列表:
>>>couple = [anchen,dudo]
>>>couple
[['sun','18','180'],['dodo','20','169']]
小小剧透一下后面内容:python里有一概念叫容器:那就是可包含其他对象的对象。有两种主要容器叫:序列(列表、元组、字符串)和映射(字典),序列中每个元素都有编号,映射中每个元素都有名称:键。还有一种特殊容器既不是序列又不是映射,它叫集合,后面的学习历程中会有一部分详细讨论。
有几种操作适用于所有序列,包括索引、切片、相加、相乘和成员资格检查,另外还有提供了一些内置函数,可用于确定序列长度,以及找出序列中最大和最小的元素。迭代操作也很重要,在以后的章节中会有详细讲述迭代操作。
序列中所有元素都有编号-----从0开始递增。就像是c语言里数组的访问一样:
C语言:
#include
int main()
{
char a[20];
scanf("%s",&a);
printf("%c",a[3]);
return 0;
}
python:
>>>anchen = 'abcde'
>>>anchen[0]
'a'
这些都算是索引。但是python的索引不止这些功能,咱们还可以这么玩:
>>>anchen[-1]
'e'
>>>anchen[-3]
'c'
大家可能也开始好奇负数索引该怎么玩,下面我们就给大家详细图解一下负数索引:
anchen = 'abcde'
正数时:'a , b , c , d , e'
索引下标:0 1 2 3 4
负数时:'a , b , c , d , e'
索引下标:-5 -4 -3 -2 -1
相信有了这个图会很好理解许多。
还可以直接对字符串进行索引操作,不只是对序列名操作。
>>>anchen[2]
'c'
>>>'abcde'[2]
'c'
就像这样两种操作是等价的!
前面索引是对序列的单独元素进行访问,而切片来访问特定范围内的元素。
>>>anchen = 'abcdefg'
>>>anchen[1:4]
'bcd'
大家会发现这里切出来了一个范围,不再是单个元素。
给大家再来一波详解:
>>>anchen = 'abcdefg'
#对应索引值 0123456
anchen[1:4]
'bcd'
就是切下下标[1~4)的所有元素,大家看到了这里我使用了数学上区间表示法,左闭右开。
就是包含左边界,不包含右边界。
同上面我们也可以使用负数切片:
>>>anchen[-4:-1]#注意这里不是anchen[-1:-3],这样会切出一个空片。
'def'
负数切片并不难理解,只要理解清楚上面的负数索引就简单了。具体切片里面更多玩法大家可以自己解锁,基本规则就是我描述那样。
比如空切片和偷懒切片
>>>anchen[:]#空切片
'abcdefg'
>>>anchen[3:10]#偷懒切片
'defg'
#我们知道他只有七个元素,下标最大是6.这里我们使用大于6的数,就是把剩下元素都切出来
步长:我们执行切片操作时,都是我们指定起点终点,但是我们通常省略另外一个参数,步长。在普通切片中默认步长为1。这意味着所有元素都可被找到,下面我们来对比对比不同步长会发生什么?
>>>anchen[0:6:1]
'abcdefg'
当我们切换步长时:
>>>anchen[0:6:2]
'aceg'
这里我们发现步长为2时输出结果变了,变成了’aceg’,这里的2起到作用就是访问切片元素时以2为单位长度访问下一个,换数字也如此。如果步长是一个负数,那么就是从切片划定范围中从后往前访问,单位长度是该数绝对值!步长不能为0
可使用加法来拼接序列。
>>>[1,2,3] + [4,5,6]
[1,2,3,4,5,6]
>>>'hello,' + 'sunshine23'
'hello,sunshine23'
>>>[1,2,3] + 'sunshine23'
typeerror:can noly concatenate list (not "string") to list
从错误信息我们可以看出,不能拼接字符串和列表,虽然都是序列。一般而言,不同类型不能拼接!毕竟人妖殊途。
将一个序列乘以一个数x时,表示重复这个序列x次来创建一个新序列:
>>>'anchen' * 3
'anchenanchenanchen'
>>>[42,12] * 3
[42, 12, 42, 12, 42, 12]
这些就是简单的序列相乘。
None、空列表和初始化
空列表是使用不包含任何内容的两个方括号([])表示的,如果要创建一个可包含十个元素的列表,但没有任何有用的内容,可像前面那样使用[42] * 10。但更准确的做法是使用[0] * 10,这将创建一个包含十个零的列表,然而在有些情况下,你可能想使用表示“什么都没有”的值,如表示还没有在列表中添加任何元素,在这种情况下,可使用None在python中那么表示什么都没有,因此,要将列表的长度初始化为10,可像这样做:
>>>anchen = [None] * 10
>>>anchen
[None,None,None,None,None,None,None,None,None,None,]
要检查特定的值是否包含在序列中,可使用运算符in,这个运算符与前面讨论的运算符稍有不同,他检查是否满足指定的条件,并返回相应的值,满足条件时返回True,不满足条件返回False这样的运算符称为布尔运算符,而前述真值称为布尔值,布尔表达式将在后面更新中详细介绍。
下面是一些in运算符的使用:
>>> anchen = 'sunshine'
>>>'s' in anchen
True
>>>'w' in anchen
False
内置函数:len,max,min非常有用。len可以返回序列中元素个数,min和max分别可以返回最小值和最大值。
>>>number = [1,2,3,4,5,6,7,8,9]
>>>len(nember)
9
>>>min(number)
1
>>>max(number)
9
>>>max(1,5,9)
9
今天就先分享到这,列表里的重要操作咱想单独列一篇。欲知后事如何,且看下更!