python学习笔记06:列表&元组
Python有6个序列的内置类型,即列表、元组、字符串、Unicode字符串、buffer对象和 xrange 对象,但序列通用的操作包括:索引、长度、组合(序列相加)、重复(乘法)、分片、检查成员、遍历、最小值和最大值。
在Python的内置类型中,最常见的是列表和元组。
列表:
1.可以作为一个方括号内的逗号分隔值出现;
2.列表的数据项不需要具有相同的类型,只要把逗号分隔的不同的数据项使用方括号括起来即可。即[]中,可以有字符串、数字、变量、列表等等元素,元素之间用英文逗号隔开,每个元素的位置可用下标表示,从0开始依次递增。
列表
知识要点1&运行结果1:列表-查
注:
切片操作时,类如names[x,y]的形式中,只要序号x、y都为非空时,取值则取names[x]到names[y-1]的连续的值。知识要点2&运行结果2:列表-增
知识要点3&运行结果3:列表-改
知识要点4&运行结果4:列表-删
知识要点5&运行结果5:列表-统计
知识要点6&运行结果6:列表-清空
知识要点7&运行结果7:列表-反转
知识要点8&运行结果8:列表-排序
知识要点9&运行结果9:列表-合并
知识要点10&运行结果10:列表-复制:浅copy()
注:为什么列表中的小列表内容改变后,复制前后的列表都有变化;但修改原列表内某一内容后,复制的列表却没同步复制?
答:根据程序运行先后,先进行的复制操作,后进行的修改列表中内容的操作,所以新列表第一层copy的内容无变化。
但原列表中的小列表,实际上是一个独立的内存指针,自己独立占内存部分,在大列表中用列表表示出来的只是一个内存地址,
所以copy时,小列表只是copy了一个内存地址,内存地址只有一个,如果names将其地址变了,names2展示该内存地址时也不一样了;
反之,names2将其地址变了,name展示该内存地址时也随之要统一。所以说,copy时只是copy了列表的第一层,没有copy第二层。
而为什么大列表本身作为一个内存地址,使用copy时复制了第一层呢?因为copy的构造就是这样的,功能就是可以复制列表的第一层。
------这个就叫做“浅copy”。而深层次的copy是把全部列表内容copy过来(和原内容所占内存不一样,所以全部copy过来不代表两份内容所占内存位置一样,和变量a = b不一样),这就需要import一个copy模块,即import copy;而引用时需引用deepcopy()方法,如果引用copy(),就和浅copy一样了。
总结下来,浅copy的三种形式:
- 浅copy方式一:
• import copy
person = [“name”,[“saving”,100]]
p1 = copy.copy(person) #跟上面例子中直接调用copy()方法一个效果
- 浅copy方式二:
• person = [“name”,[“saving”,100]]
p2 = person[:] #全切片
- 浅copy方式三:
• person = [“name”,[“saving”,100]]
p3 = list(person)
关于全切片的理解,可结合下面的例子:
列表-复制:深copy()==>deepcopy()
列表循环:
元组
元组其实跟列表差不多,也有存一组数,只不过它一旦创建,便不能修改,所以又叫只读列表。
元组与列表表示的区别在于,元组用 () 将元素括起来。如:
names = ("刘翔","running",100,100)
元组中的方法只有两个:count()、index(),含义与列表中一致
print(names.count(100))
print(names.index(100))
什么情况下用元组?
程序写出来,有的地方是不能被改动的。比如数据库,一旦数据库被启动,有的地方不能被人改动,这部分内容就可以用元组来写。