Python学习笔记一:列表
一. 列表
1. 定义
列表,是由一系列按照特定顺序排列的元素组成的一个有序集合。其中可以包含字母,数字,或者其他任何元素,每一个元素之间不一定有关系。不过,在创建列表时,建议还是将相同类型的元素或者相互之间有关联的元素放在一个列表中。
鉴于包含的元素的数量,通常在给列表起名的时候,一般会以复数的形式出现。
# 创建一个关于汽车品牌的列表 cars = ['大众','丰田','宝马','捷豹','奔驰'] # 创建一个关于SMITH信息的列表 messages = ['smith','man',29,'teacher','england']
2. 列表的访问
列表是一个有序集合,所以可以通过访问列表中每个元素的位置或者索引来访问。
列表的索引值是从0开始的。
① 通过索引值访问列表元素
以上面的cars列表为例,分别访问第一个元素和最后一个元素
>>> cars[0] '大众' >>> cars[-1] '奔驰'
② 已知列表中的元素值,求元素的索引值
index()方法:用于从列表中找出某个值第一个匹配项的索引位置
index()方法语法:list.index('要查找的元素值',start[,end])
>>> cars = ['大众','丰田','宝马','捷豹','奔驰'] >>> cars.index('大众') 0 >>> cars.index('奔驰') 4 # 当列表内有重复出现的元素时,可以选择start和end的值,来限制查找 >>> cars.append('宝马') >>> cars ['大众', '丰田', '宝马', '捷豹', '奔驰', '宝马'] >>> cars.index('宝马',0,4) 2
3. 列表的修改
想要修改列表中的元素,只需要对相应的元素进行重新赋值即可
# 将列表cars中第二个元素的值修改成劳斯莱斯 >>> cars[1] = '劳斯莱斯' >>> cars ['大众', '劳斯莱斯', '宝马', '捷豹', '奔驰']
如果只知道元素的值,不知道索引值,那么可以使用index()方法,先找到元素的索引值,再进行修改。
如果指定修改元素的索引值超出列表最大索引值,程序会报错。
4. 列表的添加
① 在列表的末尾追加元素
# 列表cars的末尾追加一个新元素 >>> cars.append('法拉利') >>> cars ['大众', '劳斯莱斯', '宝马', '捷豹', '奔驰', '法拉利']
② 在列表的特定位置插入元素
>>> cars.insert(1,'帕加尼') >>> cars ['大众', '帕加尼', '劳斯莱斯', '宝马', '捷豹', '奔驰', '法拉利']
③ 在列表的末尾扩展/合并另一个列表的元素值
# 将cars列表合并到messages列表的末尾 >>> messages.extend(cars) >>> messages ['smith', 'man', 29, 'teacher', 'england', '大众', '帕加尼', '劳斯莱斯', '宝马', '捷豹', '奔驰', '法拉利']
注意:
方法append()和方法extend()都是将元素添加到列表的末尾,但两者是不同的
- append()方法在向目标列表添加元素时,不管是单个元素还是一个列表,都会被当作一个整体
- extend()方法则是将被追加列表的元素一一拆分,然后再追加到目标列表中
# append()追加列表 >>> messages.append(cars) >>> messages ['smith', 'man', 29, 'teacher', 'england', ['大众', '帕加尼', '劳斯莱斯', '宝马', '捷豹', '奔驰', '法拉利']]
5. 列表的删除
① 使用del删除
>>> cars ['大众', '帕加尼', '劳斯莱斯', '宝马', '捷豹', '奔驰', '法拉利'] >>> del cars[1] >>> cars ['大众', '劳斯莱斯', '宝马', '捷豹', '奔驰', '法拉利']
关键字del的本质是将变量从内存中删除,变量的定义或者使用就是放在内存中的,将其从内存中删除,后续变量就不可再使用了。所以在删除列表中的元素时,尽力不要使用del。
除了作为关键字,del还作为一个函数使用,作用是一样的。
>>> del(cars[1]) >>> cars ['大众', '宝马', '捷豹', '奔驰', '法拉利']
② 使用pop()方法弹出元素
>>> cars ['大众', '宝马', '捷豹', '奔驰', '法拉利'] >>> popped = cars.pop(1) >>> cars ['大众', '捷豹', '奔驰', '法拉利'] >>> popped '宝马'
使用方法pop()时,与其说是删除元素,不如说是将元素从原来的列表中弹了/取了出来,被弹出的元素依旧存在,只需要重新赋值给一个变量,即可再次使用。
③ 使用remove()方法移除
remove()方法是在只知道元素的值,索引值不知道的情况下使用的。
remove()方法只能移除目标元素第一次出现的值,如果目标元素存在多个,可以搭配循环来实现
>>> cars ['大众', '捷豹', '奔驰', '法拉利'] >>> cars.remove('法拉利') >>> cars ['大众', '捷豹', '奔驰']
④ 使用clear()方法清空列表
>>> cars ['大众', '捷豹', '奔驰'] >>> cars.clear() >>> cars []
6. 列表排序
6.1 永久性排序
列表使用sort()方法对列表进行永久性排序,如果指定参数,则使用指定的比较函数排序。
sort()方法语法:
list.sort([cmp = None,]key = None,reverse = False)
-------------------------------------------------------------------
cmp:可选参数, 如果指定了该参数会使用该参数的方法进行排序(仅限于Pthon2环境下使用)
key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse:排序规则,reverse = True 降序, reverse = False 升序(默认)
① 无参数:
>>> cars = ['大众','丰田','宝马','捷豹','奔驰'] >>> cars.sort() >>> cars ['丰田', '大众', '奔驰', '宝马', '捷豹']
② 指定key
6.2 临时性排序
函数sorted()能够在保留列表原有顺序的基础上,同时对列表进行特定顺序的输出
函数sorted()语法:
sorted(list,iterable,cmp=None,key=None,reverse=False) ---------------------------------------------------------------- iterable:可迭代对象 key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 reverse:排序规则,reverse = True 降序 , reverse = False 升序(默认)。
① 无参数无比较函数
>>> cars = ['大众','丰田','宝马','捷豹','奔驰'] >>> sorted(cars) ['丰田', '大众', '奔驰', '宝马', '捷豹'] >>> cars ['大众', '丰田', '宝马', '捷豹', '奔驰']
② 指定key
6.3 倒着打印
reverse()方法:仅仅只是将列表的顺序倒着打印,而不对源顺序进行调整。
reverse()方法对于列表的修改是永久性的,但可以再次使用,使列表恢复原状
>>> cars = ['大众','丰田','宝马','捷豹','奔驰'] >>> cars.reverse() >>> cars ['奔驰', '捷豹', '宝马', '丰田', '大众']
7. 多维列表
多维列表的元素是列表,即列表里嵌套列表,属性遵循一维列表的规则,最常见的有二维列表和三维列表。
二维列表:
# 创建一个二维列表,元素为德国,美国和中国三个国家的汽车品牌 >>> cars = [['奥迪','奔驰','宝马'],['雪佛兰','凯迪拉克','别克'],['红旗','吉利','长城']]
三维列表:
# 创建一个三维列表,元素为德国,美国和中国的一些信息 countries = [[['柏林', '慕尼黑', '斯图加特'], ['纽约', '华盛顿', '旧金山'], ['北京', '上海', '深圳']], [['奥迪', '奔驰', '宝马'], ['雪佛兰', '凯迪拉克', '别克'], ['红旗', '吉利', '长城']], [['西门子', '金介', 'Mann'], ['苹果', '谷歌', '摩托罗拉'], ['华为', '小米', 'Vivo']]]
可以看出,三维列表的元素是二维列表,二维列表的元素是普通列表,以此类推,N维列表的元素则是N-1维列表
8. 列表的遍历
列表的遍历就是从头到尾依次获取列表中的元素,在遍历的过程中可以完成查询,处理等操作。
① 使用for循环遍历列表
>>> cars = ['大众','丰田','宝马','捷豹','奔驰'] >>> for car in cars: print(car) 大众 丰田 宝马 捷豹 奔驰
在for循环中执行更多操作:
>>> for car in cars: print('这是一辆%s牌的汽车。\n' % car) 这是一辆大众牌的汽车。 这是一辆丰田牌的汽车。 这是一辆宝马牌的汽车。 这是一辆捷豹牌的汽车。 这是一辆奔驰牌的汽车。
② 使用for循环和函数enumerate()遍历列表
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
enumerate()语法:
enumerate(list, [start=0])
还是以cars列表作为目标,查看for循环和函数enumerate()是如何实现遍历的?
>>> cars = ['大众','丰田','宝马','捷豹','奔驰'] >>> for index,car in enumerate(cars,start=1): print(index,car) 1 大众 2 丰田 3 宝马 4 捷豹 5 奔驰
③ 使用函数range()和len()遍历列表
除了使用for循环和函数enumrate()的结合,来实现既可以输出数据,又可以表明数据下标的功能,数字函数range()和len()也可以实现同样的功能
函数range():可以生成一系列的数字,从起始值开始,到终止值结束,不包括终止值,通常会结合循环使用。具体语法:
range(start,end,step) start:起始值,不写时默认为0 end:终止值 step:步长,不写时默认为1 >>> for i in range(1,10,2): print(i) 1 3 5 7 9
函数len():返回对象(字符,列表,元组,字典等)的长度
>>> cars ['大众', '丰田', '宝马', '捷豹', '奔驰'] >>> len(cars) 5
利用数字函数range()和len()实现列表的遍历,既可以输出数据下标,又可以不输出,全看自身需求
>>> cars ['大众', '丰田', '宝马', '捷豹', '奔驰'] >>> for i in range(len(cars)): print(i,cars[i]) 0 大众 1 丰田 2 宝马 3 捷豹 4 奔驰
④ 使用while循环遍历列表
>>> cars ['大众', '丰田', '宝马', '捷豹', '奔驰'] >>> i = 0 >>> while i < len(cars): print(cars[i]) i+=1 大众 丰田 宝马 捷豹 奔驰
⑤ 多维列表的遍历
多维列表的遍历和普通列表的遍历方法是一样的,只不过多了一层循环嵌套
# 二维列表的遍历
>>> cars = [['奥迪','奔驰','宝马'],['雪佛兰','凯迪拉克','别克'],['红旗','吉利','长城']] >>> for country_cars in cars: for car in country_cars: print(car) 奥迪 奔驰 宝马 雪佛兰 凯迪拉克 别克 红旗 吉利 长城
9. 列表切片
切片,顾名思义就是将序列中的一部分切下来,获得一个新的序列。
切片适用于字符串,列表,元组,和字典等,是Python序列的重要操作之一。
要创建切片,则要指定需要的第一个元素和最后一个元素的索引值,和range()函数中的索引值使用一 样,切片使用中的索引依旧不包含最后一个元素。
# 取列表cars的前三个元素 >>> cars = ['大众','丰田','宝马','捷豹','奔驰'] >>> cars1 = cars[0:3] >>> cars1 ['大众', '丰田', '宝马'] # 不指定起始索引,默认从头开始读取 >>> cars2 = cars[:3] >>> cars2 ['大众', '丰田', '宝马'] # 不指定终止索引,默认读取到末尾 >>> cars3 = cars[3:] >>> cars3 ['捷豹', '奔驰'] # 既不指定初始索引,也不指定种植索引,相当于复制 >>> cars4 = cars[:] >>> cars4 ['大众', '丰田', '宝马', '捷豹', '奔驰']
索引值除了是正值之外,还可以是负值,从-1开始,书写的时候,依旧是小值在前,大值在后
# 取列表的倒数第二个和倒数第三个元素 >>> cars ['大众', '丰田', '宝马', '捷豹', '奔驰'] >>> cars5 = cars[-3:-1] >>> cars5 ['宝马', '捷豹'] # 不指定起始索引,默认从头读取 >>> cars6 = cars[:-1] >>> cars6 ['大众', '丰田', '宝马', '捷豹'] # 不指定终止索引,默认读取到末尾 >>> cars7 = cars[-3:] >>> cars7 ['宝马', '捷豹', '奔驰']
列表切片之后的序列,依旧还是列表,所以列表的各种格则依旧遵循
遍历切片:
>>> cars ['大众', '丰田', '宝马', '捷豹', '奔驰'] >>> cars1 = cars[1:3] >>> cars1 ['丰田', '宝马'] >>> for car in cars1: print(car) 丰田 宝马
二. 元组
三. 字典