0.Python之禅
可以通过在python解释器中输入import this 查看python应该注意的一些规范与原则,如下:
1.列表
元素用方括号括起,元素之间用逗号隔开,如[1,2,3,4]
三大特点:
(1)异构性
列表里想装啥就装啥,即:他可以包含不同种类、任意类型的对象,甚至可以嵌套列表
示例:
运行结果:
(2)有序性
列表里装的元素都是有顺序的,可以按照位置序号获取单个元素,也可以用分片的方法来进行多个连续元素的获取
访问元素的方法:
a.索引
与其他语言中数组的索引访问方式相似,告诉位置即可,并且位置从0开始
不同于其他语言中的数组:python提供了负数索引,-1指定倒数第一个位置,-2,-3类推
示例:
运行结果:
b.切片
在方括号中指定要使用的第一个元素和最后一个元素的索引,中间用冒号隔开,如list[1:3] ,注意此处说的是索引,即冒号两边的是索引,所以是从0开始的
还有以下常见做法:
《1》如果省略掉终止索引,就表示一直截取到末尾:
《2》如果省略掉起始索引,就表示从起始元素就开始截取:
《3》可以使用负索引,也就是从右往左的索引,最右侧是-1,向左依次为-2,-3
《4》要跳着截取,就需要多加一个冒号,第三个参数表示跳的步长,如list[0:5:2]
示例:
运行结果:
同时由示例可以注意到:当采用索引区间时,冒号右边的位置的值不会被包含
跳着截取时,下一个元素的值为(前一个元素的位置+步长)的位置的值
疑问:如果对截取出的分片进行修改,会影响到原始的列表吗?
示例:
运行结果:
对原始列表进行切片,产生一个全新的列表,用变量获取该切片,实质上是获取了list分片的新的独立拷贝,所以对a的修改不会影响原始列表
(3)本地可修改
列表的大小和内容可以随意改变,在插入、删除、修改列表元素时,不需要建立一份新的列表拷贝,而是在原来的内存地址上直接修改列表对象
a.修改元素
索引赋值
与索引访问列表元素相似,直接给索引访问的值赋值,如list[0]=8
切片赋值:
list[1:3]=[1,2,3]
示例:
运行结果:
所以由上述示例可以看出,切片赋值,与右边界和=右边的赋值个数无关,本质是先删除切片位置的元素,再在该切片位置添加指定元素,
并且由list1可以看出,删除的时候也没有删除右边界的值,所以切片始终是左闭右开
b.添加元素
append() ------------------- 在列表的末尾添加元素
insert() ------------------- 在列表的任何位置添加新元素,需要指定索引和值,插入是就地修改,而不是返回修改后的新列表
extend() ------------------- 在尾部一次性添加多个元素,需要将多个以列表形式传入
示例:
运行结果:
c.删除元素
del list[0] ---------------------------- 删除指定元素,删除后无法再访问
pop() ---------------------------- 删除末尾的元素,并且可以接受它的返回值,也可以不接收,在括号中传入索引时,就是删除指
定索引处的元素
remove(值) ------------------------------ 删除指定值第一次出现的位置的元素,如果要删除的值可能在列表中出现多次,就需要使用循环 来删除所有,使用remove可以接收它删除的值,也可以不接收
示例:
运行结果:
d.元素排序
sort() ------------------------- 成员函数,本地修改,对原列表进行永久性修改排列顺序,是按内置的规则排序,比如数字按照从小到大,
字母按照字典中字母顺序,不能获取返回值,相当于C++中的引用修改
sorted() ---------------------- 全局函数,临时修改,对原列表不改变,通过它的返回值使用它
上述两个函数都可以通过传入参数reverse=True来进行反向排序
reverse() ---------------------- 成员函数,本地修改,对原列表进行修改,只是按照元素的位置进行翻转,不能获取返回值,
但可通过再次调用reserve()
示例:
运行结果:
操作列表
(1)获取列表的长度-------len(list)
(2)对数字列表进行简单的统计计算
min() -------------------求最小值
max() -------------------求最大值
sum() -------------------对列表中的数字求和
示例:
运行结果:
(3)列表解析——用一行生成代码
变量名=[使用循环变量的式子 for 循环变量 in range()]
这里的for循环不需要冒号
示例:
运行结果:
(4)遍历切片
可以使用切片来遍历列表中的部分元素
示例:
运行结果:
(5)复制列表
示例1:
运行结果1:
可以看出如果直接将一个列表赋给一个变量,此时这个变量只是这个列表的别名,如num2只是num1的别名,对num2进行修改,num1会同样变化,因为本质它们指向同一个列表
示例2:
运行结果2:
而当我们需要复制一个新的独立的列表,我们可以使用此示例中的缺省切片,会产生原列表的副本