day2-列表、元组、字典、enumenrate、深浅拷贝
一、列表
1 # 定义一个列表 2 >>> names = ['a', 'b', 'c', 'd', 'e'] 3 # 取值 4 >>> names[0] 5 'a' 6 # 切片,只能由左向右切片 7 # 取1到3之间的元素,包括1,不包括3 8 >>> names[1:3] 9 ['b', 'c'] 10 # 取1到-1之间的元素 11 >>> names[1:-1] 12 ['b', 'c', 'd'] 13 # 取0到3之间的元素,效果等同于names[0:3] 14 >>> names[:3] 15 ['a', 'b', 'c'] 16 # 取3到最后一个元素 17 >>> names[3:] 18 ['d', 'e'] 19 # 从0到最后一个元素,每隔两个取一个 20 >>> names[0::2] 21 ['a', 'c', 'e'] 22 # 开始位置和结束位置可以省略 23 >>> names[::2] 24 ['a', 'c', 'e'] 25 # 追加 26 >>> names.append('f') 27 >>> names 28 ['a', 'b', 'c', 'd', 'e', 'f'] 29 # 插入 30 >>> names.insert(2,'g') 31 >>> names 32 ['a', 'b', 'g', 'c', 'd', 'e', 'f'] 33 # 修改 34 >>> names[5] = '5' 35 >>> names 36 ['a', 'b', 'g', 'c', 'd', '5', 'f'] 37 # 删除 38 # 从内存中删除元素 39 >>> del names[0] 40 >>> names 41 ['b', 'g', 'c', 'd', '5', 'f'] 42 # 删除最后一个 43 >>> names.pop() 44 'f' 45 >>> names 46 ['b', 'g', 'c', 'd', '5'] 47 # 删除某一个下标的值 48 >>> names.pop(1) 49 'g' 50 >>> names 51 ['b', 'c', 'd', '5'] 52 # 移除某个元素 53 >>> names.remove('c') 54 >>> names 55 ['b', 'd', '5'] 56 # 扩展 57 >>> names2 = [1,2,3,4] 58 >>> names.extend(names2) 59 >>> names 60 ['b', 'd', '5', 1, 2, 3, 4] 61 # 统计5的个数 62 >>> names.count('5') 63 1 64 # 翻转 65 >>> names.reverse() 66 >>> names 67 [4, 3, 2, 1, '5', 'd', 'b'] 68 # 排序 69 >>> names.sort() 70 >>> names 71 [1, 2, 3, 4, '5', 'b', 'd'] 72 # 计算某个元素的下标 73 >>> names.index('5') 74 4 75 # 清空列表,Python3方法 76 # names.clear()
二、元组
元祖一旦创建,无法修改-->只读列表
1 # 创建元组 2 >>> names = ('a', 'b', 'c' ,'d', 'e') 3 # 取值 4 >>> names[0] 5 'a' 6 # 计算某个元素的个数 7 >>> names.count('a') 8 1 9 # 计算某个元素的下标 10 >>> names.index('b') 11 1 12 # 切片方式与列表相同
注:如果元组中嵌套列表或者字典,列表和字典中的值是可以被更改的
三、字典
1 # 创建一个字典 2 >>> stu_info = { 3 'name':'ww', 4 'class':'7', 5 'city':'sz' 6 } 7 # 字典是无序的 8 >>> stu_info 9 {'city': 'sz', 'name': 'ww', 'class': '7'} 10 # 取值 11 >>> stu_info['name'] 12 'ww' 13 >>> stu_info.get('class') 14 '1' 15 # 增加 16 >>> stu_info['number'] = '777' 17 >>> stu_info 18 {'city': 'sz', 'number': '777', 'name': 'ww', 'class': '7'} 19 # 修改 20 >>> stu_info['class'] = '1' 21 >>> stu_info 22 {'city': 'sz', 'number': '777', 'name': 'ww', 'class': '1'} 23 # del从内存中删除 24 >>> del stu_info['city'] 25 >>> stu_info 26 {'number': '777', 'name': 'ww', 'class': '1'} 27 # 根据键删除 28 >>> stu_info.pop('number') 29 '777' 30 >>> stu_info 31 {'name': 'ww', 'class': '1'} 32 # 随机删除 33 >>> stu_info.popitem() 34 ('name', 'ww') 35 >>> stu_info 36 {'class': '1'} 37 # 判断键是否存在 38 >>> 'class' in stu_info 39 True 40 # 输出所有的键 41 >>> stu_info.keys() 42 ['city', 'name', 'class'] 43 # 输出所有的值 44 >>> stu_info.values() 45 ['sz', 'ww', '7'] 46 # 输出所有的键值 47 >>> stu_info.items() 48 [('city', 'sz'), ('name', 'ww'), ('class', '7')] 49 # 取值,如果没有这个键,则创建 50 >>> stu_info.setdefault("number",'999') 51 '999' 52 >>> stu_info 53 {'city': 'sz', 'number': '999', 'name': 'ww', 'class': '7'} 54 # 合并 55 >>> stu_info2 = {'addr':'hn'} 56 >>> stu_info.update(stu_info2) 57 >>> stu_info 58 {'addr': 'hn', 'city': 'sz', 'number': '999', 'name': 'ww', 'class': '7'} 59 # 初始化一个以列表中的值为键,值均为某个值的字典 60 >>> dict.fromkeys(["name","addr"],"") 61 {'name': '', 'addr': ''} 62 # 清空字典 63 >>> stu_info.clear() 64 >>> stu_info 65 {}
循环字典:
1 # 高效些,以索引的方式取值 2 for i in info: 3 print i,info[i] 4 5 # 有个把数据转换成列表的过程,数据量大时不建议 6 for k,v in info.items(): 7 print k,v
四、enumenrate
enumenrate:在for循环时,获取列表或者元组的下标值和元素
1 name_list = [('a',1),('b',2)] 2 3 for index in enumerate(name_list): 4 print index 5 6 print "-"*30 7 for index,name in enumerate(name_list): 8 print index,name 9 10 (0, ('a', 1)) 11 (1, ('b', 2)) 12 ------------------------------ 13 0 ('a', 1) 14 1 ('b', 2)
五、深浅拷贝
Python的数据结构总体分为两类:一类:字符串和数字,另外一类:列表、元组、字典等
对于字符串和数字来说,赋值(=)、浅拷贝(copy)和深拷贝(deepcopy)其实都毫无意义,因为它们永远指向同一个内存地址
1. 赋值只是创建一个变量,该变量指向原来的内存地址
1 >>> name1 = [1,2,[3,4],5] 2 >>> name2 = name1 3 >>> id(name1) 4 43002096 5 >>> id(name2) 6 43002096
2. 浅拷贝是指在内存地址中,只拷贝出第一层的内存的地址,所以拷贝变量和被拷贝变量的内存地址是不一样的
1 >>>import copy 2 >>> name3 = copy.copy(name1) 3 >>> id(name3) 4 42996560 5 # 修改name1 6 >>> name1[0] = 'a' 7 >>> name1[2][0] = 'c' 8 >>> name1 9 ['a', 2, ['c', 4], 5] 10 >>> name3 11 [1, 2, ['c', 4], 5]
浅拷贝的三种方式:
a. copy模块的copy方法
b. 切片:name3 = name1[:]
c. 列表自带方法:name3 = name1.copy()
3. 深拷贝是指在内存中将所有的数据重新创建一份
1 >>> name4 = copy.deepcopy(name1) 2 >>> id(name4) 3 42999040 4 >>> name4 5 ['a', 2, ['c', 4], 5] 6 >>> name1 7 ['a', 2, ['c', 4], 5] 8 # 修改name1 9 >>> name1[1] = 3 10 >>> name1[2][1] = 5 11 >>> name1 12 ['a', 3, ['c', 5], 5] 13 >>> name4 14 ['a', 2, ['c', 4], 5]

浙公网安备 33010602011771号