本文主要记录Python的基础知识,这同样是每一个Python用户所要走过的必经之路。任何一段复杂的Python代码,归根结底都是由最简单的元素构成。只有夯实基础,方能轻松自如。
01列表的概念
关于列表的三点说明:
- 列表的构造:英文状态下的方括号[],元素存放在该方括号中。元素不受任何限制,可以存放数值、字符串及其他数据结构的内容。
- 列表是一种序列,即每个列表元素按照顺序存入,都有属于自己的位置即下标。
- 列表是一种可变类型的数据结构,即可以实现对列表的修改,包括增加、删除和修改列表中的元素值。
注:通过索引(下标)可以获取列表元素,Python中的位置索引是从0开始的,即[0]代码该列表中的第一个元素,[1]代表第二个元素。
02列表四种常见索引方式
1.正向单索引
从左到右只获取列表中的某一个元素,用[n]表示。举例:
注:
- 变量list1是一个含有7个元素的列表,位置索引是从0开始,以6结束;
- 该列表包含字符串(用引号括起来)、数值和列表(嵌套列表);
- 本例中print(list1[6][1])两层索引可以取出嵌套列表中的元素“体重72”。
2.负向单索引
在正向单索引的基础上添加一个负号“-”,含义是从右向左的方向获取元素,可以用[-n]表示,例如:
适用情况:如果列表元素特别多,而需要获取的数据恰好是最后几个,负向单索引将显得尤为方便和简单,避免了从头开始数的麻烦。
注:最后一个列表元素用[-1]表示,不要写成[-0],初学者容易犯此错误。
3.切片索引
按照固定步长,连续取出多个元素,用[start:end:step]表示。
- start指索取元素起始位置,
- end指索取元素终止位置(end位置的元素是取不到的)
- step指索取元素步长(默认为1,表示逐个取出一连串的列表元素)
- 切片,相当于值域范围,左闭右开,例如[1,4)
注:
- list2[2:6]逐个获取元素,但无法取出list2[6],也即"湖南"无法被取出;
- list2[1:6:2]从第二个元素即安徽开始,步长为2,隔元素返回;
- list2[-3:-1]中用到了前面的负向索引,表示从倒数第三个开始取,取到倒数第一个(但不包含倒数第一个),所以最后结果无"湖北"。为解决这个问题,需要用到下面的无限索引。
4.无限索引
无限索引是在切片过程中不限定起始元素的位置或者终止元素的位置,甚至起始和终止元素的位置都不限定,可以用[::step]表示。第一个冒号是指从列表的第一个元素开始获取;第二个冒号是指到最后一个元素结束。注意,这里与切片索引不同的是,会包含最后一个元素值。例如:
注:
- 如需从头开始返回元素,可以将切片中的start设置为冒号":";
- 如需返回至结尾的元素,可以将end设置为冒号":";
- 若start和end均设置为冒号,返回整个列表元素(等同于复制),再通过step控制步长,实现有规律地跳格取数。
03列表元素增加删除、修改
1.列表中增加元素
如果要往列表中增加元素,可使用三种方法:append、extend和insert。
- append是列表特有的方法,其他常见对象没有。该方法是往列表尾部增加元素,而且每次只能增加一个元素。若要一次增加多个元素,则需使用extend方法。
- 使用extend方法往列表尾部增加多个元素时,需要将多个元素捆绑为列表传递给该方法,即使只有一个元素也要以列表的形式传递。
- insert方法可以在列表的指定位置插入新值,该方法需要传递两个参数:一个是索引(或下标)参数,一个是具体插入的值(常量和列表均可,若是列表则以嵌套列表的形式插入)。
2.列表中删除元素
列表元素删除有三种方法,分别是pop、remove、clear。
- 通过pop方法,可以删除列表元素两种风格,一种是默认删除列表末尾元素,另一种是删除指定位置列表元素,而且都只能删除一个元素。
- remove方法提供了删除指定值的功能,但它只能删除首次出现的指定值如果列表元素特别多,通过pop方法删除指定位置元素就显得很笨拙。因为你要算出删除值的具体位置,这时使用remove方法就很方便。
- clear代表清空,将列表中的所有元素全部删除,返回一个空列表。
3.列表中修改元素
思想:取而改之,先获取错误元素(索引),再通过正确值替换,举例:
4.其他操作:排序、计数、查询位置、逆转
- count方法用来对列表中的某个元素进行计数,每次只能往count方法中传递一个值;
- reverse方法是将列表元素全部翻转,[1,2,3]变成[3,2,1];
- sort实现对列表元素排序,默认是升序;若将reverse参数设置为True,进而调整为降序。
注:sort方法只能对同质数据进行排序,即列表元素统一都是数值型或字符型,不可以混合多种数据结构或数据类型。
04元组的概念
1.元组与列表类似,三点说明如下:
- 元组通过英文状态下的圆括号()构成,其存放的元素与列表一样,可以是不同的数值类型,也可以是不同的数据结构。
- 元组仍然是一种序列,所以几种获取列表元素的索引方法同样可以使用到元组对象中;
- 与列表最大的区别:元组不再是一种可变类型的数据结构。
2.元组两种可用的"方法":count和index
由于元组只是存储数据的不可变容器,其只有这两种可用的方法,举例:
05字典
字典是非常常用的一种数据结构,它与json格式的数据非常相似,核心就是以键值对的形式存储数据,四点说明如下:
- 构造字典对象需要使用大括号{ }表示,每一个字典元素都是以键值对的形式存在,并且键值对之间用英文状态下的冒号隔开,即key:value;
- 键在字典中是唯一的,不能有重复。对于字符型的键需要用引号引起来。值可以是单个值,也可以是多个值构成的列表、元组和字典;
- 字典不再是序列,无法通过位置索引完成元素值的获取,只能通过键索引实现。
- 字典与列表一样,都是可变类型的数据结构。
1.字典键索引获取元素值
- 通过"年龄"索引,获取了元素值33;
- "子女"对应的值也是字典,属于嵌套字典,故需要双重键索引来获取儿子的姓名;
- 键"兴趣"对应的值是列表,"游泳"这个值只能通过先锁定字典的键,再锁定列表元素的位置才能获得。
2.字典的可变性-增加元素
增加字典元素有如下三种方式,分别是setdefault方法、update方法和键索引方法:
以上分别用这三种方法,为字典增加了"户籍"、"学历"、"身高"。
- setdefault方法接受两个参数,第一个参数为字典的键,第二个参数是键对应的值;
- update可以更新字典,可以修改元素和增加元素;与setdefault方法不同的是该方法接受的是一个字典对象;
- 键索引:如果原字典中没有指定的键,就往字典中增加元素;否则,起到修改字典元素的功能。
3.字典的可变性-删除元素
删除字典元素用pop、popitem和clear三种方法。
- pop方法:如果不给其传递值,则表示删除列表末尾的一个元素,否则就删除指定下标的一个元素,但是字典中pop方法必须指定需要删除的键,否则就会引起语法错误;如果需要删除嵌套字典中的某个键,就必须先通过索引取出对应的字典,然后使用pop方法完成嵌套字典元素的删除;
- popitem方法:不需传递任何值,可删除字典中任意的某个元素;
- clear方法:干净利落地清空字典中的所有元素。
4.字典的可变性-修改元素
两种方法:update方法和键索引方法(同增加元素中)
注:如果字典中的值是另一个字典或列表,需要先通过键索引实现字典元素的查询,然后在查询的基础上应用对应的修改方法即可(如update方法或“取而代之”的方法)
其他方法:get、keys、values 、items
- get方法的功能与键索引一致,可以从字典中取出键对应的值。所不同的是如果某个键在字典中不存在,应用键索引的方法会产生“键错误”的信息;而get方法不会报错,也就不会影响其他脚本的正常执行。
- keys、values和items方法分别取出字典中的所有键、值、和键值对。
列表、元组、字典三种数据结构总结