1)python序列介绍
2)python的列表介绍
3)列表的创建(四种方法)
4)列表元素的增加(四种方法)
5)列表的元素删除(三种方法)
6)列表元素访问(两种方法)
7)列表元素计数和列表长度
8)列表元素的成员资格判断(两种方法)
9)列表排序
10)reserved()返回迭代器
11)列表中的其他函数
12)多维列表
————————————————————————————————————————————————
1)python序列介绍:
序列是一种数据存储方式,它用来存储一系列的数据。在内存中,序列就是一块用来存放多个值的连续的内存空间,例如:一个整数序列 [10,20,30,40] ,它可以如下表示:
前面我们强调python中一切皆是对象,所以在内存中上面的整数序列 [10,20,30,40](序列中存储了4个对象,分别是10、20、30、40) 的存储方式是:
从上图我们可以知道在序列中存储的是对象的地址而不是对象本身,也就是说存放的是对象10、20、30、40的id而不是对象10、20、30、40本身。在python中常见的序列有:字符串(字符序列)、列表(可存储任意类型数据)、元组、字典、集合。
2)python的列表介绍:
列表是用于存储任意数目、任意类型的数据集合。它是内置的可变序列,包含多个元素的有序连续的内存空间。列表定义的标准方法:a= [10,20,30,40]
,其中的10,20,30,40 是列表 a 的元素。前面我们在讲解python中的字符串时,反复强调字符串是不可变的,而python中的列表是可变的。
3)列表的创建(四种方法):
方法一:(直接[]创建)
可以通过 aa=[]
直接创建一个空的列表,也可以给列表直接添加元素,创建之后可以直接输出整个列表,也可以通过索引指定列表中的某个元素:
>>> aa=[] //创建一个空的列表 >>> aa=[10,'zxj',True]//元素类型任意
>>> aa >>> aa
[] [10, 'zxj', True]
>>> aa[0]
10
>>> aa[1]
'zxj'
方法二:(list())
可以使用list()创建列表,但是其实使用 list() 也可以实现将其他任意类型转换为列表:
>>> bb=list()//创建一个空的列表 >>> bb=list(range(10))
>>> bb >>> bb
[] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> bb=list("faog,ao")
>>> bb
['f', 'a', 'o', 'g', ',', 'a', 'o']
方法三:(range()创建整数列表)
在python中 range() 返回的是一个range对象而不是列表对象,所以我们要使用list()将其变成列表对象。range() 创建整数列表它的格式是:range(start,end,step)
>>> aa=list(range(0,10,1)) //和前面的list(range(10))等效
>>> aa
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> aa=list(range(10,0,-1)) //加上符号就是逆序输出(逆序就要大的在前小的在后)
>>> aa
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> aa=list(range(-2,-33,-2)) //间隔为2的逆序输出(逆序就要大的在前小的在后)
>>> aa
[-2, -4, -6, -8, -10, -12, -14, -16, -18, -20, -22, -24, -26, -28, -30, -32]
方法四: (推导式)
通过推导式创建列表(在后续会进一步讲解推导式)非常的方便快捷,在实际的开发应用中经常使用,它多和for循环、if判断语句一起使用:
>>> aa=[x*2 for x in range(5)]//循环创建多个元素
>>> aa
[0, 2, 4, 6, 8]
>>> aa=[x*2 for x in range(5) if x%3==0]
>>> aa
[0, 6]
4)列表元素的增加(四种方法):
在python中如果要对原有的列表进行添加元素的操作我们一般会选择添加在原列表的尾部,虽然python中如果将新添加的元素插入列表中间那么在其后的其他元素会自动被后移一位以空出位置存放新添加的元素,但是即便元素后移的操作是系统自动完成不需要像C语言一样要自己实现,也是需要大量移动移动列表元素,这就使得效率降低了。
添加元素的四种方法:
方法一:(append()函数——在原列表上进行操作)
使用append()函数添加列表元素的方法,一次只能添加一个,不能同时添加多个元素:
>>> aa=[23,"fja2",True,10.24]//未添加新元素前的原列表aa
>>> aa
[23, 'fja2', True, 10.24]
>>> aa.append('学习','python',918)//对于使用append()函数添加列表元素的方法,一次只能添加一个,不能同时添加多个元素
Traceback (most recent call last):
File "<pyshell#37>", line 1, in <module>
aa.append('学习','python',918)
TypeError: list.append() takes exactly one argument (3 given)
>>> aa.append('学习')
>>> aa
[23, 'fja2', True, 10.24, '学习'] //添加了新元素后的列表aa
方法二:(运用 + 【会创建一个新的列表对象,原本的列表aa仍保持不变】)
其实使用 + 去实现添加新元素的方法并不是真正的尾部添加元素而是创建一个新的列表对象,然后将原列表中的元素和新列表中的元素依次复制到新的列表对象中。如果对于算法有简便快捷性的要求的话不推荐使用这种方法实现添加元素,因为它会涉及大量的复制操作,降低效率。
>>> aa=[23,"fja2",True,10.24] //未添加新元素前的原列表aa
>>> aa
[23, 'fja2', True, 10.24]
>>> aa=aa+['学习','python',918] //可以同时添加多个元素
>>> aa
[23, 'fja2', True, 10.24, '学习', 'python', 918]
>>> aa=aa+['学习']+['python']+[918] //可以以链式方式接连添加多个元素
>>> aa
[23, 'fja2', True, 10.24, '学习', 'python', 918]
方法三:(insert()函数)
使用insert()函数可以将元素插入到原列表对象的任意位置中,但是这样会让插入位置后面的所有元素都进行移动,影响了处理的速度。类似的函数还有:remove()、pop()、del()。
>>> aa=[23,"fja2",True,10.24] //未添加新元素前的原列表aa
>>> aa
[23, 'fja2', True, 10.24]
>>> aa.insert(2,False) //在原列表中间插入新元素,其他后移
>>> aa
[23, 'fja2', False, True, 10.24]
>>> aa.insert(5,'学习') //在原列表尾部插入新元素
>>> aa
[23, 'fja2', False, True, 10.24, '学习']
方法四:(乘法实现)
使用乘法去扩展列表以形成一个新的列表,但这种方法所形成的的新列表中的元素会和原列表中的元素有很多重复的。可以使用乘法操作的数据类型还有:字符串、元组
>>> aa=[23,"fja2",True,10.24] //未添加新元素前的原列表aa
>>> aa
[23, 'fja2', True, 10.24]
>>> aa*=3 进行乘法扩展之后的aa
>>> aa
[23, 'fja2', True, 10.24, 23, 'fja2', True, 10.24, 23, 'fja2', True, 10.24]
5)列表的元素删除(三种方法):
方法一:(del——可删除列表指定位置的元素)
>>> aa=[23, 'fja2', True, 10.24, '学习', 'python', 918] //未删除前的原列表aa
>>> aa
[23, 'fja2', True, 10.24, '学习', 'python', 918]
>>> del aa[1]
>>> aa
[23, True, 10.24, '学习', 'python', 918] //通过del后的aa
方法二:(pop()——删除并返回指定位置的元素,如果未指定位置则默认操作列表的最后一个元素)
>>> aa=[23, 'fja2', True, 10.24, '学习', 'python', 918] //未删除前的原列表aa
>>> aa
[23, 'fja2', True, 10.24, '学习', 'python', 918]
>>> aa.pop() //未指定删除位置,默认删除列表的最后一个元素
918
>>> aa
[23, 'fja2', True, 10.24, '学习', 'python']
>>> aa.pop(1) //删除指定位置的元素
'fja2'
>>> aa
[23, True, 10.24, '学习', 'python']
方法三:(remove()——删除首次出现的指定元素,如果指定元素不存在则抛出异常)
>>> aa=[23, 'fja2', True, 10.24, '学习','fja2',23 ,'python',23,918] //未删除前的原列表aa
>>> aa
[23, 'fja2', True, 10.24, '学习', 'fja2', 23, 'python', 23, 918]
>>> aa.remove(23) //指定删除aa中的元素23
>>> aa
['fja2', True, 10.24, '学习', 'fja2', 23, 'python', 23, 918] //只删除了aa中的首个23,其他不删除
>>> aa.remove('Python') //指定删除的元素'Python'不存在而报错
Traceback (most recent call last):
File "<pyshell#75>", line 1, in <module>
aa.remove('Python')
ValueError: list.remove(x): x not in list
6)列表元素访问(两种方法):
方法一:(通过索引访问列表元素)
>>> aa=[23, 'fja2', True, 10.24, '学习','fja2',23 ,'python',23,918] //原列表aa
>>> aa
[23, 'fja2', True, 10.24, '学习', 'fja2', 23, 'python', 23, 918]
>>> aa[2] //访问aa列表中的第三个元素
True
>>> aa[-1] //倒序访问aa列表的第一个元素
918
>>> aa[2:6:2] //和前面的字符串的截取是同样道理的
[True, '学习']
>>> aa[6:2:-1] //逆序(头大尾小)
[23, 'fja2', '学习', 10.24]
方法二:(index())
通过index()函数可以获得指定元素在列表中的首次出现的索引位置,它使用的方法是:index(value,[start],[end])
,此处的start和end是用于锁定在列表中的搜索范围。
>>> aa=[23, 'fja2', True, 10.24, '学习', 'fja2', 23, 'python', 23, 918] //原本的列表aa
>>> aa
[23, 'fja2', True, 10.24, '学习', 'fja2', 23, 'python', 23, 918]
>>> aa.index('fja2',2,8) //在列表aa中的第三个~第九个元素中搜索第一个出现'fja2'的位置
5
>>> aa.index('fja2',0,8) //在列表aa中的第一个~第九个元素中搜索第一个出现'fja2'的位置
1
7)列表元素计数和列表长度:
>>> aa.count('fja2') >>> aa=[23, 'fja2', True, 10.24, '学习', 'fja2', 23, 'python', 23, 918]
2 >>> len(aa)
10
8)列表元素的成员资格判断(两种方法):
判断列表中是否存在指定元素可以采用count(),如果指定元素出现次数为0那么就说明它不是列表中的成员。但是我们更经常的是使用 in 关键字进行判断。
>>> aa=[23, 'fja2', True, 10.24, '学习', 'fja2', 23, 'python', 23, 918]
>>> 'fja2' in aa
True
>>> 1024 in aa
False
9)列表排序:
利用sort()函数对列表元素进行排序,但是一定要记住:只有同一类型的元素才可以实现排序(进行比较),如果列表元素中既有数字、又有字符串那么无法进行排序。排序有 升序、降序、乱序 。
>>> aa=[10,48,2,552,2] //未排序之前的原列表aa
>>> aa
[10, 48, 2, 552, 2]
>>> aa.sort() //对aa进行排序(默认是升序)
>>> aa
[2, 2, 10, 48, 552]
>>> aa.sort(reverse=True) //对aa进行排序(降序)
>>> aa
[552, 48, 10, 2, 2]
>>> bb=[10, 48,'fa','323','fnf33',True] //类型不同,无法比较
>>> bb
[10, 48, 'fa', '323', 'fnf33', True]
>>> bb.sort()
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
bb.sort()
TypeError: '<' not supported between instances of 'str' and 'int'
>>> aa=['sofe','oajgo','faf','ejpe'] //全都是字母字符串进行比较
>>> aa
['sofe', 'oajgo', 'faf', 'ejpe']
>>> aa.sort()
>>> aa
['ejpe', 'faf', 'oajgo', 'sofe']
>>> aa=['sofe','oajgo','faf','ejpe','3532','3ufn3'] //字母字符串和数字字符串进行比较
>>> aa
['sofe', 'oajgo', 'faf', 'ejpe', '3532', '3ufn3']
>>> aa.sort()
>>> aa
['3532', '3ufn3', 'ejpe', 'faf', 'oajgo', 'sofe']
>>> aa=['sofe','oajgo','faf','ejpe','3532','3ufn3'] //未排序之前的原列表aa
>>> import random
>>> random.shuffle(aa) //乱序排列
>>> aa
['3ufn3', 'ejpe', 'sofe', '3532', 'oajgo', 'faf']
>>> random.shuffle(aa)
>>> aa
['3532', 'sofe', 'faf', 'oajgo', 'ejpe', '3ufn3']
10)reserved()返回迭代器:
在Python中我们结合前面的讲解已经知道如果要逆序输出列表元素可以采用 aa[::-1]
。其实还可以有另一种方法:利用 reserved()函数返回一个迭代器,再结合list()将迭代器转换为列表
。迭代器的有效次数只有一次,再次list(bb)时,不会再输出逆序列表,而是会输出一个[]空列表。(迭代器具有一次性,如果要再次使用就必须重新定义)
aa=['3532', 'sofe', 'faf', 'oajgo', 'ejpe', '3ufn3'] //原本的未逆序之前的aa列表
>>> bb=reversed(aa)
>>> bb //bb就是迭代器对象
<list_reverseiterator object at 0x0000016BBDEAEBE0> //返回迭代器
>>> list(bb) //将迭代器转换为列表
['3ufn3', 'ejpe', 'oajgo', 'faf', 'sofe', '3532'] //实现逆序
11)列表中的其他函数:
max(aa)、min(aa)、sum(aa)
12)多维列表:
一维列表可以帮助存储一维、线性的数据,而二维列表可以帮助存储二维、表格的数据。二维列表其实就是列表中的列表,再多维列表那么就是列表中的列表中的列表…以此增加。二维列表例子如下:
存储结构解释:
也可以利用for…in循环去实现:
for m in range(3):
for n in range(4):
print(aa[5][4],end='\t'
print()