1. 列表的方法
-
1.1 append() 无返回值
- 功能:向列表的最后添加一个元素
- 示例:
hero = ['钢铁侠','绿巨人','蜘蛛侠'] print('修改前:',hero) # 通过切片方式向列表添加元素 hero[3:3] = 'A' # 尾加 hero[2:2] = 'C' # 在索引位置加 hero[9:9] = 'B' # 若指定的索引值大于列表长度,元素将添加到列表尾部 hero.append('黑珍珠') # append方法 print('修改后:',hero)
- 运行结果:
-
1.2 insert(self, index, p_object) 无返回值
- 功能:向列表指定位置插入一个元素
- 参数1:要插入的位置
- 参数2:需要传递一个序列(如果index大于列表长度则将元素添加到尾部)
- 示例:
hero = ['钢铁侠','绿巨人','蜘蛛侠'] print('修改前:',hero) # insert hero.insert(2,'我来了') print('修改后:',hero)
- 运行结果:
- 功能:向列表指定位置插入一个元素
-
1.3 extend()
- 功能:使用一个新的序列来扩展当前序列,参数需要传递一个序列,
但与列表相加不同的是,extend方法可以添加不同类型的元素
- 示例:
hero += [‘黑寡妇’,‘超人’]
- 功能:使用一个新的序列来扩展当前序列,参数需要传递一个序列,
-
1.4 pop()
- 功能:根据索引删除并返回指定元素 (默认删除最后一个元素)
- 示例:
-
1.5 remove()
- 功能:根据值删除指定元素(如果相同值的元素有多个,只会删除第一个)
- 示例:
-
1.6 clear()
- 功能:清空列表中的所有元素
- 示例:
hero = ['钢铁侠','绿巨人','蜘蛛侠'] print('修改前:',hero) hero.clear() print('修改后:',hero)
- 运行结果:
-
1.7 reverse()
- 功能:翻转列表
- 示例:
-
1.8 sort(key = None,reverse = True)
- 功能:用来对列表中的元素进行排序 True 反序,False 正序
- 示例:
2.遍历列表 for
- 2.1 语法:
- 2.2 注意:for 循环的代码块会执行多次,序列中有几个元素就会执行几次。每执行一次就会将序列中的一个元素赋值给变量
- 2.3 range(start,stop[,step]) 生成一个自然数序列
-
参数说明
- start:起始数字。默认从0开始。例如 range(5) 等价于range(0,5)
- stop:结束数字,但不包括stop。例如: range(0,5) 是[0,1,2,3,4] 没有5
- step:步长,默认为1.例如:range(0,5)等价于range(0,5,1)
-
示例:
hero = ['钢铁侠','绿巨人','蜘蛛侠'] for i in hero: print(i)
-
运行结果:
for i in range(5): print(i, end=' ')
-
3. 元组
- 3.1 元组 tuple
-
语法:元组名字= (元素,…)
-
示例:
mytuple = (1,2,3,4,5) print(mytuple, type(mytuple))
-
运行结果:
-
- 3.2 元组是一个不可变序列。一般当我们希望数据不改变时,我们使用元组,其他情况下基本都使用列表
- 3.3 元组不是空元组至少有一个逗号(,) 当元组不是空元组时括号可以省略
- 示例:
mytuple=() # 空元组 print(mytuple, type(mytuple)) mytuple = ('a') # 字符串 print(mytuple, type(mytuple)) mytuple = ('a',) # 只要有一个逗号就是元组 print(mytuple, type(mytuple)) mytuple = ('a','b','c') # 标准写法 print(mytuple, type(mytuple)) mytuple = 'e','f','g' print(mytuple,type(mytuple))
- 运行结果:
- 示例:
- 3.4 元组的解包 * 指元组当中的每一个元素都赋值给一个变量。
-
示例:
my_tuple = '我','喜','欢','用','Python' a,b,c,d,e = my_tuple print(a,b,c,d,e) a,b = my_tuple # 参数太少,报错 print(a,b)
-
运行结果:
-
- 3.5 * 号将元组中多余的数据都保存到带* 的变量中,数据类型为列表
- 示例:
my_tuple = '我','喜','欢','用','Python' a,b,*c = my_tuple print(a,b,c)
- 运行结果:
- 示例:
4. 字典
- 4.1 概念
- 字典属于一种新的数据结构称为映射(mapping)
- 字典的作用和列表类似,都是用来存储对象的容器
- 列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反
- 字典中每一个元素都有唯一的名字(key),通过这个唯一的名字可以找到指定的元素(value),反之则行不通。
- 字典 dict : key-value结构
- 每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item),
- 创建一个有数据的字典 语法{key:value}
- 字典的值可以是任意对象 字典的
键可以是任意的不可变对象(int str bool tuple....)
- 字典的键是不能重复的,如果出现重复的后面的会替换前面的。这由字典key的唯一性决定
- 4.2 字典的创建用{}
- 示例:
d = {1:'宋江', 2:'卢俊义',3:'林冲',4:'吴用',5:'李逵',6:'武松',7:'孙二娘'} print(d) print(type(d))
- 运行结果:
print(d[1],d[2],d[5]) # key值不存在时d[-1] 报错
- 运行结果:
- 示例:
- 4.3 字典的使用
-
dict() 创建字典 关键字参数不能重复
- 示例:
搞清楚使用{} 和使用dict() 创建字典的区别
d = {1:'宋江', 2:'卢俊义',3:'林冲',4:'吴用',5:'李逵',6:'武松',1:'孙二娘'} print(d,type(d))
- 运行结果:
d = dict(name='葫芦娃',age=7,gender='男') print(d,type(d))
- 运行结果:
d = dict(name='葫芦娃',age=7,gender='男',name='葫芦娃') print(d,type(d))
- 运行结果:
- 总结:使用dict() 比{} 创建字典有更高的要求,dict() 中关键字重名会报错,而{} 会替换原来的值。
- 示例:
-
双值子序列的序列转换为字典
- 双值序列,序列当中有2个值[4,5],(1,2),‘ab’
- 子序列,如果序列当中的元素也是序列,我们就称这个元素为子序列[(1,2,4),[4,5]]
- 示例:
d = dict([('name','葫芦娃'),('age',7)]) print(d,type(d))
- 运行结果:
-
get(key[,default]) 根据键key来获取字典的值。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值 (不指定第二个参数是返回None)
- 示例:
print(d.get('name')) print(d.get('sex')) print(d.get('sex','男'))
- 运行结果:
- 示例:
-
修改字典的value
- 示例1:
d = {1:'宋江', 2:'卢俊义',3:'林冲',4:'吴用',5:'李逵',6:'武松'} print(d,type(d)) d[1] = '齐天大圣' d[8] = '花和尚' print(d,type(d))
- 运行结果:
- 示例1:
-
setdefault
注意与dict[key] 修改的区别
- 示例:
d = {1:'宋江', 2:'卢俊义',3:'林冲',4:'吴用',5:'李逵',6:'武松'} print(d,type(d)) d.setdefault(1,'晁盖') d.setdefault(8,'花和尚') print(d,type(d))
- 运行结果:
- 示例:
-
len() :取得字典中键值对个数
print(d,type(d)) print(len(d))
- 运行结果:
- 运行结果:
-
in 或 not in : 检查字典中是否包含(或包含)有指定的键
-
示例:
print('name' in d) print('sex' not in d)
-
运行结果:
-
-
- update() 将其他字典的key-value添加到当前的字典当中
- 示例:
d = {1:'a',2:'b',3:'c'} d1 = {5:'d',6:'e',7:'f'} d.update(d1) print(d,type(d))
- 运行结果:
- 示例:
- del 删除字典中的key-value
- 示例:
print(d) del d[1] del d[7] print(d)
- 运行结果:
- 示例:
- popitem()
- 功能:
- 随机删除字典中的一个k-v,一般都会删除最后一个
- 删除之后会将删除的k-v作为返回值返回
- 返回值为元组类型 (key,value)
- 示例:
print(d) r = d.popitem() print(d, r)
- 运行结果:
- 功能:
- clear() :清空字典中的所有元素
- pop(key[,default])
- 功能:根据key删除指定的value。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值。
注意必须传参,否则报错
- 示例:
- 功能:根据key删除指定的value。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值。
5. 浅复制 -----copy()
- copy() 方法用来对字典进行浅复制
- 示例1:普通赋值
d = {1:'宋江', 2:'卢俊义',3:'林冲',4:'吴用'} print(d,id(d)) d1 = d d1[1] = '晁盖' print(d,id(d)) print(d1,id(d1))
- 运行结果:
- 示例1:普通赋值
- 结论:直接赋值并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,当被复制的对象数据改变后,原对象的数据也改变。
- 示例2:copy() 浅copy
d = {1:'宋江', 2:{5:'卢俊义'},3:'林冲',4:'吴用'} print('修改前d:',d,id(d)) d1 = d.copy() print('修改前d1',d1,id(d1)) d1[2][5] = '晁盖' d1[3] = '花和尚' print('修改后d',d,id(d)) print('修改后d1',d1,id(d1)) print('d:',id(d[2])) print('d1:',id(d1[2]))
- 运行结果:
- 示例2:copy() 浅copy
- 结论:
- 当浅复制的值是不可变对象(数值,字符串,元组)时,和“等于赋值”的情况一样,对象的id值与浅复制原来的值相同。
- 当浅复制的值是可变对象(列表和元组)时会产生一个“不是那么独立的对象”存在。有两种情况:
- 1.复制的 对象中
无复杂
子对象,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。 - 2.复制的对象中
有复杂
子对象 (例如本例中),如果不改变其中复杂子对象,浅复制的值改变并不会影响原来的值。 但是改变原来的值中的复杂子对象的值会影响浅复制的值。
- 1.复制的 对象中
- 示例3:
import copy # deepcopy d = {1:'宋江', 2:{5:'卢俊义'},3:'林冲',4:'吴用'} print('修改前d:',d,id(d)) d1 = copy.deepcopy(d) print('修改前d1',d1,id(d1)) d1[2][5] = '晁盖' print('修改后d',d,id(d)) print('修改后d1',d1,id(d1)) print('d:',id(d[2])) print('d1:',id(d1[2]))
- 运行结果:
结论:被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。